
<!DOCTYPE HTML>
<html lang="zh-hans" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>13.面试题二.md · 计算机 ,java , 大数据 基础知识体系</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        <meta name="author" content="hzh">
        
        
    
    <link rel="stylesheet" href="../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-anchors/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-anchor-navigation-ex/style/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-toggle-chapters/toggle.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-back-to-top-button/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-code/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-search-pro/search.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-pageview-count/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
    

        
    
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="../basic/collection/1.java集合.html" />
    
    
    <link rel="prev" href="10面试题一.html" />
    

    
    
    
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="输入并搜索" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        <li class="header">操作系统</li>
        
        
    
        <li class="chapter " data-level="1.1" data-path="../">
            
                <a href="../">
            
                    
                    Introduction
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" data-path="../操作系统/1.基本概述.html">
            
                <a href="../操作系统/1.基本概述.html">
            
                    
                    1.操作系统基本概述
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3" data-path="../操作系统/2.进程管理之进程与线程.html">
            
                <a href="../操作系统/2.进程管理之进程与线程.html">
            
                    
                    2.进程管理之进程与线程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4" data-path="../操作系统/3.进程管理之处理机调度.html">
            
                <a href="../操作系统/3.进程管理之处理机调度.html">
            
                    
                    3.进程管理之处理机调度
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5" data-path="../操作系统/4.进程管理之进程同步.html">
            
                <a href="../操作系统/4.进程管理之进程同步.html">
            
                    
                    4.进程管理之进程同步
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.6" data-path="../操作系统/5.内存管理之基本概念.html">
            
                <a href="../操作系统/5.内存管理之基本概念.html">
            
                    
                    5.内存管理之基本概念
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7" data-path="../操作系统/6.内存管理之虚拟内存.html">
            
                <a href="../操作系统/6.内存管理之虚拟内存.html">
            
                    
                    6.内存管理之虚拟内存
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.8" data-path="../操作系统/7.IO设备管理之基本概念.html">
            
                <a href="../操作系统/7.IO设备管理之基本概念.html">
            
                    
                    7.IO设备管理之基本概念
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9" data-path="../操作系统/8.面试题总结一.html">
            
                <a href="../操作系统/8.面试题总结一.html">
            
                    
                    8.面试题总结一
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">计算机网络篇</li>
        
        
    
        <li class="chapter " data-level="2.1" data-path="../计算机网络/1.计算机网络入门基础概念.html">
            
                <a href="../计算机网络/1.计算机网络入门基础概念.html">
            
                    
                    1.计算机网络入门文章(必读)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.2" data-path="../计算机网络/2.计算机网络通信基础.html">
            
                <a href="../计算机网络/2.计算机网络通信基础.html">
            
                    
                    2.计算机网络通信入门文章(必读)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.3" data-path="../计算机网络/3.数据链路层.html">
            
                <a href="../计算机网络/3.数据链路层.html">
            
                    
                    3.数据链路层
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.4" data-path="../计算机网络/4.网络层1.html">
            
                <a href="../计算机网络/4.网络层1.html">
            
                    
                    4.网络层(一)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.5" data-path="../计算机网络/5.网络层2.html">
            
                <a href="../计算机网络/5.网络层2.html">
            
                    
                    5.网络层(二)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.6" data-path="../计算机网络/6.传输层.html">
            
                <a href="../计算机网络/6.传输层.html">
            
                    
                    6.传输层
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.7" data-path="../计算机网络/7.应用层.html">
            
                <a href="../计算机网络/7.应用层.html">
            
                    
                    7.应用层(⭐)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.8" data-path="../计算机网络/10.HTTP相关协议.html">
            
                <a href="../计算机网络/10.HTTP相关协议.html">
            
                    
                    8.HTTP相关及发展
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.9" >
            
                <span>
            
                    
                    9.websocket
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="2.10" data-path="../计算机网络/9.面试题二.html">
            
                <a href="../计算机网络/9.面试题二.html">
            
                    
                    面试题总结一
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">数据结构篇</li>
        
        
    
        <li class="chapter " data-level="3.1" data-path="../数据结构/1.图论.html">
            
                <a href="../数据结构/1.图论.html">
            
                    
                    1.图论
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2" data-path="../数据结构/2.图论例题.html">
            
                <a href="../数据结构/2.图论例题.html">
            
                    
                    2.图论例题
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3" data-path="../数据结构/3.散列表.html">
            
                <a href="../数据结构/3.散列表.html">
            
                    
                    3.散列表
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.4" data-path="../数据结构/4.排序算法.html">
            
                <a href="../数据结构/4.排序算法.html">
            
                    
                    4.排序算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.5" data-path="../数据结构/5.排序列题.html">
            
                <a href="../数据结构/5.排序列题.html">
            
                    
                    5.排序算法例题
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.6" data-path="../数据结构/6.树论.html">
            
                <a href="../数据结构/6.树论.html">
            
                    
                    6.树论
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.7" data-path="../数据结构/7.树论例题.html">
            
                <a href="../数据结构/7.树论例题.html">
            
                    
                    7.树论例题.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.8" data-path="../数据结构/9.模板.html">
            
                <a href="../数据结构/9.模板.html">
            
                    
                    数据结构模板
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">算法篇</li>
        
        
    
        <li class="chapter " data-level="4.1" data-path="../算法/leetCode周赛题解.html">
            
                <a href="../算法/leetCode周赛题解.html">
            
                    
                    leetCode周赛记录
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.2" data-path="../算法/1.时间复杂度.html">
            
                <a href="../算法/1.时间复杂度.html">
            
                    
                    1.时间复杂度
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3" data-path="../算法/2.深度优先搜索.html">
            
                <a href="../算法/2.深度优先搜索.html">
            
                    
                    2.深度优先搜索算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4" data-path="../算法/2.深度优先搜索题目集.html">
            
                <a href="../算法/2.深度优先搜索题目集.html">
            
                    
                    2.深搜题目集
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.5" data-path="../算法/3.广度优先搜索.html">
            
                <a href="../算法/3.广度优先搜索.html">
            
                    
                    3.广度优先搜索算法
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">JVM篇</li>
        
        
    
        <li class="chapter " data-level="5.1" data-path="../jvm/1.jvm内存结构.html">
            
                <a href="../jvm/1.jvm内存结构.html">
            
                    
                    1.jvm内存结构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.2" data-path="../jvm/2.HotSpot虚拟机对象探秘.html">
            
                <a href="../jvm/2.HotSpot虚拟机对象探秘.html">
            
                    
                    2.HotSpot虚拟机对象探秘.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.3" data-path="../jvm/3.对象存亡与垃圾收集算法.html">
            
                <a href="../jvm/3.对象存亡与垃圾收集算法.html">
            
                    
                    3.对象存亡与垃圾收集算法.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.4" data-path="../jvm/4.HotSpot的算法细节与垃圾收集器.html">
            
                <a href="../jvm/4.HotSpot的算法细节与垃圾收集器.html">
            
                    
                    4.HotSpot的算法细节与垃圾收集器.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.5" data-path="../jvm/5.内存分配与回收策略.html">
            
                <a href="../jvm/5.内存分配与回收策略.html">
            
                    
                    5.内存分配与回收策略.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.6" data-path="../jvm/6.类文件结构.html">
            
                <a href="../jvm/6.类文件结构.html">
            
                    
                    6.类文件结构.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.7" data-path="../jvm/7.类加载机制.html">
            
                <a href="../jvm/7.类加载机制.html">
            
                    
                    7.类加载机制.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.8" data-path="../jvm/8.jvm逃逸分析.html">
            
                <a href="../jvm/8.jvm逃逸分析.html">
            
                    
                    8.逃逸分析技术
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">多线程篇</li>
        
        
    
        <li class="chapter " data-level="6.1" data-path="basic/0.多线程路线图.html">
            
                <a href="basic/0.多线程路线图.html">
            
                    
                    1.多线程学习路线图
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.2" data-path="basic/0.java内存模型与线程.html">
            
                <a href="basic/0.java内存模型与线程.html">
            
                    
                    2.java内存模型与线程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.3" data-path="3.并行程序基础.html">
            
                <a href="3.并行程序基础.html">
            
                    
                    2.并行程序基础
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.4" data-path="basic/0.jhappenBefore与jvm指令重排.html">
            
                <a href="basic/0.jhappenBefore与jvm指令重排.html">
            
                    
                    3.happenBefore与jvm指令重排序
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.5" data-path="basic/1.synchronized与volatile.html">
            
                <a href="basic/1.synchronized与volatile.html">
            
                    
                    4.synchronized与volatile.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.6" data-path="basic/2.ThreadLocal.html">
            
                <a href="basic/2.ThreadLocal.html">
            
                    
                    5.ThreadLocal.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.7" data-path="cas/1.乐观锁与悲观锁.html">
            
                <a href="cas/1.乐观锁与悲观锁.html">
            
                    
                    6.乐观锁与悲观锁.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.8" data-path="cas/2.CAS与atomic类.html">
            
                <a href="cas/2.CAS与atomic类.html">
            
                    
                    7.CAS与atomic类.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.9" data-path="aqs/1.AQS.html">
            
                <a href="aqs/1.AQS.html">
            
                    
                    8.AQS.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.10" data-path="aqs/2.基于AQS的并发工具.html">
            
                <a href="aqs/2.基于AQS的并发工具.html">
            
                    
                    9.基于AQS的并发工具.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.11" data-path="blockingQueue/1.阻塞队列.html">
            
                <a href="blockingQueue/1.阻塞队列.html">
            
                    
                    10.阻塞队列.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.12" data-path="pond/1.线程池与底层原理.html">
            
                <a href="pond/1.线程池与底层原理.html">
            
                    
                    11.线程池与底层原理.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.13" data-path="10面试题一.html">
            
                <a href="10面试题一.html">
            
                    
                    12.面试题一
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="6.14" data-path="10面试题二.html">
            
                <a href="10面试题二.html">
            
                    
                    13.面试题二.md
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">java集合篇</li>
        
        
    
        <li class="chapter " data-level="7.1" data-path="../basic/collection/1.java集合.html">
            
                <a href="../basic/collection/1.java集合.html">
            
                    
                    1.集合架构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="7.2" data-path="../basic/collection/2.HashMap源码分析.html">
            
                <a href="../basic/collection/2.HashMap源码分析.html">
            
                    
                    2.hashMap底层原理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="7.3" data-path="../basic/collection/3.ConcurrentHashMap分析.html">
            
                <a href="../basic/collection/3.ConcurrentHashMap分析.html">
            
                    
                    3.ConcurrentHashMap分析
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">设计模式篇</li>
        
        
    
        <li class="chapter " data-level="8.1" >
            
                <span>
            
                    
                    1.创造型模式
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="8.2" data-path="../设计模式/factory/三种工厂模式介绍.html">
            
                <a href="../设计模式/factory/三种工厂模式介绍.html">
            
                    
                    三种工厂模式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="8.3" data-path="../设计模式/factory/实战工厂模式.html">
            
                <a href="../设计模式/factory/实战工厂模式.html">
            
                    
                    实战工厂模式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="8.4" data-path="../设计模式/factory/实战抽象工厂模式.html">
            
                <a href="../设计模式/factory/实战抽象工厂模式.html">
            
                    
                    实战抽象工厂模式
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">mysql篇</li>
        
        
    
        <li class="chapter " data-level="9.1" data-path="../数据库/mysql/1.b树b+树的底层原理.html">
            
                <a href="../数据库/mysql/1.b树b+树的底层原理.html">
            
                    
                    1.mysql索引基础之b树与b+树⭐⭐
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.2" data-path="../数据库/mysql/2.mysql索引.html">
            
                <a href="../数据库/mysql/2.mysql索引.html">
            
                    
                    2.mysql索引及优化⭐⭐⭐⭐
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.3" data-path="../数据库/mysql/3.mysql存储引擎.html">
            
                <a href="../数据库/mysql/3.mysql存储引擎.html">
            
                    
                    3.mysql存储引擎.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.4" data-path="../数据库/mysql/4.多版本并发控制之mvcc原理.html">
            
                <a href="../数据库/mysql/4.多版本并发控制之mvcc原理.html">
            
                    
                    4.多版本并发控制之mvcc原理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.5" data-path="../数据库/mysql/4.mysql事务.html">
            
                <a href="../数据库/mysql/4.mysql事务.html">
            
                    
                    5.mysql事务
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.6" data-path="../数据库/mysql/5.mysql锁机制.html">
            
                <a href="../数据库/mysql/5.mysql锁机制.html">
            
                    
                    6.mysql的锁机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.7" data-path="../数据库/mysql/6.mysql面试题一.html">
            
                <a href="../数据库/mysql/6.mysql面试题一.html">
            
                    
                    7.mysql面试题一
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">高并发中间件篇</li>
        
        
    

    
        
        <li class="header">架构理论篇</li>
        
        
    
        <li class="chapter " data-level="11.1" data-path="../架构/0.架构演进.html">
            
                <a href="../架构/0.架构演进.html">
            
                    
                    1.架构演进
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="11.2" data-path="../架构/0.微服务架构与soa架构.html">
            
                <a href="../架构/0.微服务架构与soa架构.html">
            
                    
                    2.微服务架构与soa架构
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">高可用系统篇</li>
        
        
    
        <li class="chapter " data-level="12.1" data-path="../高可用架构/1.限流.html">
            
                <a href="../高可用架构/1.限流.html">
            
                    
                    1.系统限流
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="12.2" data-path="../高可用系统/2.服务熔断.html">
            
                <a href="../高可用系统/2.服务熔断.html">
            
                    
                    2.服务熔断
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="12.3" data-path="../高可用系统/3.服务降级.html">
            
                <a href="../高可用系统/3.服务降级.html">
            
                    
                    3.服务降级
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">spring-cloud 微服务篇</li>
        
        
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            本书使用 GitBook 发布
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href=".." >13.面试题二.md</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <div id="anchor-navigation-ex-navbar"><i class="fa fa-navicon"></i><ul><ul><ul><li><span class="title-icon "></span><a href="#&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;&#x548C;&#x8FDB;&#x7A0B;&#xFF1F;"><b></b>&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;&#x548C;&#x8FDB;&#x7A0B;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x533A;&#x522B;&#xFF1F;"><b></b>&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x533A;&#x522B;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x4E3A;&#x4EC0;&#x4E48;&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#xFF1F;"><b></b>&#x4E3A;&#x4EC0;&#x4E48;&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF1F;"><b></b>&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x8BF4;&#x8BF4;&#x7EBF;&#x7A0B;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF1F;"><b></b>&#x8BF4;&#x8BF4;&#x7EBF;&#x7A0B;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x4EC0;&#x4E48;&#x662F;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF1F;"><b></b>&#x4EC0;&#x4E48;&#x662F;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x4EC0;&#x4E48;&#x662F;&#x6B7B;&#x9501;&#xFF1F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;"><b></b>&#x4EC0;&#x4E48;&#x662F;&#x6B7B;&#x9501;&#xFF1F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x8BF4;&#x8BF4;sleep&#x548C;wait&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;"><b></b>&#x8BF4;&#x8BF4;Sleep&#x548C;Wait&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;</a></li><li><span class="title-icon "></span><a href="#synchronzed"><b></b>Synchronzed</a></li><li><span class="title-icon "></span><a href="#cas"><b></b>CAS</a></li><li><span class="title-icon "></span><a href="#threadlocal"><b></b>ThreadLocal</a></li><li><span class="title-icon "></span><a href="#&#x5E76;&#x53D1;&#x96C6;&#x5408;&#x5BB9;&#x5668;"><b></b>&#x5E76;&#x53D1;&#x96C6;&#x5408;&#x5BB9;&#x5668;</a></li><li><span class="title-icon "></span><a href="#&#x5E76;&#x53D1;&#x540C;&#x6B65;&#x5BB9;&#x5668;"><b></b>&#x5E76;&#x53D1;&#x540C;&#x6B65;&#x5BB9;&#x5668;</a></li><li><span class="title-icon "></span><a href="#&#x963B;&#x585E;&#x961F;&#x5217;"><b></b>&#x963B;&#x585E;&#x961F;&#x5217;</a></li><li><span class="title-icon "></span><a href="#&#x7EBF;&#x7A0B;&#x6C60;"><b></b>&#x7EBF;&#x7A0B;&#x6C60;</a></li><li><span class="title-icon "></span><a href="#java&#x9501;&#x673A;&#x5236;"><b></b>Java&#x9501;&#x673A;&#x5236;</a></li></ul></ul></ul></div><a href="#" id="anchorNavigationExGoTop"><i class="fa fa-arrow-up"></i></a><p> <img src="https://gitee.com/dreamcater/blog-img/raw/master/uPic/&#x591A;&#x7EBF;&#x7A0B;-wXyOjj.png" alt="&#x591A;&#x7EBF;&#x7A0B;-wXyOjj"></p>
<h3 id="&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;&#x548C;&#x8FDB;&#x7A0B;&#xFF1F;"><a name="&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;&#x548C;&#x8FDB;&#x7A0B;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;&#x548C;&#x8FDB;&#x7A0B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;&#x548C;&#x8FDB;&#x7A0B;&#xFF1F;" class="plugin-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;&#x548C;&#x8FDB;&#x7A0B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x7A0B;&#x548C;&#x8FDB;&#x7A0B;&#xFF1F;</h3>
<h4 id="&#x8FDB;&#x7A0B;"><a name="&#x8FDB;&#x7A0B;" class="anchor-navigation-ex-anchor" href="#&#x8FDB;&#x7A0B;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x8FDB;&#x7A0B;" class="plugin-anchor" href="#&#x8FDB;&#x7A0B;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x8FDB;&#x7A0B;</h4>
<p>&#x8FDB;&#x7A0B;&#x662F;&#x7A0B;&#x5E8F;&#x7684;&#x4E00;&#x6B21;&#x6267;&#x884C;&#x8FC7;&#x7A0B;&#xFF0C;&#x662F;&#x7CFB;&#x7EDF;&#x8FD0;&#x884C;&#x7A0B;&#x5E8F;&#x7684;&#x57FA;&#x672C;&#x5355;&#x4F4D;&#xFF0C;&#x56E0;&#x6B64;&#x8FDB;&#x7A0B;&#x662F;&#x52A8;&#x6001;&#x7684;&#x3002;&#x7CFB;&#x7EDF;&#x8FD0;&#x884C;&#x4E00;&#x4E2A;&#x7A0B;&#x5E8F;&#x5373;&#x662F;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x4ECE;&#x521B;&#x5EFA;&#xFF0C;&#x8FD0;&#x884C;&#x5230;&#x6D88;&#x4EA1;&#x7684;&#x8FC7;&#x7A0B;&#x3002;</p>
<p>&#x6BD4;&#x5982;&#xFF1A;&#x5F53;&#x6211;&#x4EEC;&#x542F;&#x52A8; main &#x51FD;&#x6570;&#x65F6;&#x5176;&#x5B9E;&#x5C31;&#x662F;&#x542F;&#x52A8;&#x4E86;&#x4E00;&#x4E2A; JVM &#x7684;&#x8FDB;&#x7A0B;&#xFF0C;&#x800C; main &#x51FD;&#x6570;&#x6240;&#x5728;&#x7684;&#x7EBF;&#x7A0B;&#x5C31;&#x662F;&#x8FD9;&#x4E2A;&#x8FDB;&#x7A0B;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4E5F;&#x79F0;&#x4E3B;&#x7EBF;&#x7A0B;&#x3002;</p>
<h4 id="&#x7EBF;&#x7A0B;"><a name="&#x7EBF;&#x7A0B;" class="anchor-navigation-ex-anchor" href="#&#x7EBF;&#x7A0B;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x7EBF;&#x7A0B;" class="plugin-anchor" href="#&#x7EBF;&#x7A0B;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x7EBF;&#x7A0B;</h4>
<ul>
<li>&#x7EBF;&#x7A0B;&#x662F;&#x4E00;&#x4E2A;&#x6BD4;&#x8FDB;&#x7A0B;&#x66F4;&#x5C0F;&#x7684;&#x6267;&#x884C;&#x5355;&#x4F4D;</li>
<li>&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x5728;&#x5176;&#x6267;&#x884C;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#x53EF;&#x4EE5;&#x4EA7;&#x751F;<strong>&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;</strong></li>
<li>&#x4E0E;&#x8FDB;&#x7A0B;&#x4E0D;&#x540C;&#x7684;&#x662F;&#x540C;&#x7C7B;&#x7684;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x5171;&#x4EAB;&#x8FDB;&#x7A0B;&#x7684;<strong>&#x5806;</strong>&#x548C;<strong>&#x65B9;&#x6CD5;&#x533A;</strong>&#x8D44;&#x6E90;&#xFF0C;&#x4F46;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x6709;&#x81EA;&#x5DF1;&#x7684;<strong>&#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;</strong>&#x3001;<strong>&#x865A;&#x62DF;&#x673A;&#x6808;</strong>&#x548C;<strong>&#x672C;&#x5730;&#x65B9;&#x6CD5;&#x6808;</strong>&#xFF0C;&#x6240;&#x4EE5;&#x7CFB;&#x7EDF;&#x5728;&#x4EA7;&#x751F;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x6216;&#x662F;&#x5728;&#x5404;&#x4E2A;&#x7EBF;&#x7A0B;&#x4E4B;&#x95F4;&#x4F5C;&#x5207;&#x6362;&#x5DE5;&#x4F5C;&#x65F6;&#xFF0C;&#x8D1F;&#x62C5;&#x8981;&#x6BD4;&#x8FDB;&#x7A0B;&#x5C0F;&#x5F97;&#x591A;&#xFF0C;&#x4E5F;&#x6B63;&#x56E0;&#x4E3A;&#x5982;&#x6B64;&#xFF0C;&#x7EBF;&#x7A0B;&#x4E5F;&#x88AB;&#x79F0;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x8FDB;&#x7A0B;</li>
</ul>
<h3 id="&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x533A;&#x522B;&#xFF1F;"><a name="&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x533A;&#x522B;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x533A;&#x522B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x533A;&#x522B;&#xFF1F;" class="plugin-anchor" href="#&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x533A;&#x522B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x533A;&#x522B;&#xFF1F;</h3>
<h4 id="&#x5E76;&#x53D1;&#xFF1A;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x6BB5;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x90FD;&#x5728;&#x6267;&#x884C;-&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#x4E0D;&#x4E00;&#x5B9A;&#x540C;&#x65F6;&#x6267;&#x884C;&#xFF1B;"><a name="&#x5E76;&#x53D1;&#xFF1A;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x6BB5;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x90FD;&#x5728;&#x6267;&#x884C;-&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#x4E0D;&#x4E00;&#x5B9A;&#x540C;&#x65F6;&#x6267;&#x884C;&#xFF1B;" class="anchor-navigation-ex-anchor" href="#&#x5E76;&#x53D1;&#xFF1A;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x6BB5;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x90FD;&#x5728;&#x6267;&#x884C;-&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#x4E0D;&#x4E00;&#x5B9A;&#x540C;&#x65F6;&#x6267;&#x884C;&#xFF1B;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5E76;&#x53D1;&#xFF1A;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x6BB5;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x90FD;&#x5728;&#x6267;&#x884C;-&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#x4E0D;&#x4E00;&#x5B9A;&#x540C;&#x65F6;&#x6267;&#x884C;&#xFF1B;" class="plugin-anchor" href="#&#x5E76;&#x53D1;&#xFF1A;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x6BB5;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x90FD;&#x5728;&#x6267;&#x884C;-&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#x4E0D;&#x4E00;&#x5B9A;&#x540C;&#x65F6;&#x6267;&#x884C;&#xFF1B;"><i class="fa fa-link" aria-hidden="true"></i></a><strong>&#x5E76;&#x53D1;&#xFF1A;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x6BB5;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x90FD;&#x5728;&#x6267;&#x884C; (&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#x4E0D;&#x4E00;&#x5B9A;&#x540C;&#x65F6;&#x6267;&#x884C;)&#xFF1B;</strong></h4>
<h4 id="&#x5E76;&#x884C;&#xFF1A;&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x540C;&#x65F6;&#x6267;&#x884C;&#x3002;"><a name="&#x5E76;&#x884C;&#xFF1A;&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x540C;&#x65F6;&#x6267;&#x884C;&#x3002;" class="anchor-navigation-ex-anchor" href="#&#x5E76;&#x884C;&#xFF1A;&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x540C;&#x65F6;&#x6267;&#x884C;&#x3002;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5E76;&#x884C;&#xFF1A;&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x540C;&#x65F6;&#x6267;&#x884C;&#x3002;" class="plugin-anchor" href="#&#x5E76;&#x884C;&#xFF1A;&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x540C;&#x65F6;&#x6267;&#x884C;&#x3002;"><i class="fa fa-link" aria-hidden="true"></i></a><strong>&#x5E76;&#x884C;&#xFF1A;&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x540C;&#x65F6;&#x6267;&#x884C;&#x3002;</strong></h4>
<h3 id="&#x4E3A;&#x4EC0;&#x4E48;&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#xFF1F;"><a name="&#x4E3A;&#x4EC0;&#x4E48;&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4E3A;&#x4EC0;&#x4E48;&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4E3A;&#x4EC0;&#x4E48;&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#xFF1F;" class="plugin-anchor" href="#&#x4E3A;&#x4EC0;&#x4E48;&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4E3A;&#x4EC0;&#x4E48;&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#xFF1F;</h3>
<ul>
<li><strong>&#x4ECE;&#x8BA1;&#x7B97;&#x673A;&#x5E95;&#x5C42;&#x6765;&#x8BF4;&#xFF1A;</strong> &#x7EBF;&#x7A0B;&#x53EF;&#x4EE5;&#x6BD4;&#x4F5C;&#x662F;&#x8F7B;&#x91CF;&#x7EA7;&#x7684;&#x8FDB;&#x7A0B;&#xFF0C;&#x662F;&#x7A0B;&#x5E8F;&#x6267;&#x884C;&#x7684;&#x6700;&#x5C0F;&#x5355;&#x4F4D;,&#x7EBF;&#x7A0B;&#x95F4;&#x7684;&#x5207;&#x6362;&#x548C;&#x8C03;&#x5EA6;&#x7684;&#x6210;&#x672C;&#x8FDC;&#x8FDC;&#x5C0F;&#x4E8E;&#x8FDB;&#x7A0B;&#x3002;&#x53E6;&#x5916;&#xFF0C;&#x591A;&#x6838; CPU &#x65F6;&#x4EE3;&#x610F;&#x5473;&#x7740;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x8FD0;&#x884C;&#xFF0C;&#x8FD9;&#x51CF;&#x5C11;&#x4E86;&#x7EBF;&#x7A0B;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#x7684;&#x5F00;&#x9500;&#x3002;</li>
<li><strong>&#x4ECE;&#x5F53;&#x4EE3;&#x4E92;&#x8054;&#x7F51;&#x53D1;&#x5C55;&#x8D8B;&#x52BF;&#x6765;&#x8BF4;&#xFF1A;</strong>&#x73B0;&#x5728;&#x7684;&#x7CFB;&#x7EDF;&#x52A8;&#x4E0D;&#x52A8;&#x5C31;&#x8981;&#x6C42;&#x767E;&#x4E07;&#x7EA7;&#x751A;&#x81F3;&#x5343;&#x4E07;&#x7EA7;&#x7684;&#x5E76;&#x53D1;&#x91CF;&#xFF0C;&#x800C;&#x591A;&#x7EBF;&#x7A0B;&#x5E76;&#x53D1;&#x7F16;&#x7A0B;&#x6B63;&#x662F;&#x5F00;&#x53D1;&#x9AD8;&#x5E76;&#x53D1;&#x7CFB;&#x7EDF;&#x7684;&#x57FA;&#x7840;&#xFF0C;&#x5229;&#x7528;&#x597D;&#x591A;&#x7EBF;&#x7A0B;&#x673A;&#x5236;&#x53EF;&#x4EE5;&#x5927;&#x5927;&#x63D0;&#x9AD8;&#x7CFB;&#x7EDF;&#x6574;&#x4F53;&#x7684;&#x5E76;&#x53D1;&#x80FD;&#x529B;&#x4EE5;&#x53CA;&#x6027;&#x80FD;&#x3002;</li>
</ul>
<h3 id="&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF1F;"><a name="&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF1F;" class="plugin-anchor" href="#&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4F7F;&#x7528;&#x591A;&#x7EBF;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF1F;</h3>
<p>&#x53EF;&#x80FD;&#x4F1A;&#x5E26;&#x6765;<strong>&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</strong>&#x3001;<strong>&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;</strong>&#x3001;<strong>&#x6B7B;&#x9501;</strong>&#x6709;&#x53D7;&#x9650;&#x4E8E;&#x786C;&#x4EF6;&#x548C;&#x8F6F;&#x4EF6;&#x7684;&#x8D44;&#x6E90;&#x95F2;&#x7F6E;&#x95EE;&#x9898;&#x3002;</p>
<h3 id="&#x8BF4;&#x8BF4;&#x7EBF;&#x7A0B;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF1F;"><a name="&#x8BF4;&#x8BF4;&#x7EBF;&#x7A0B;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x8BF4;&#x8BF4;&#x7EBF;&#x7A0B;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x8BF4;&#x8BF4;&#x7EBF;&#x7A0B;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF1F;" class="plugin-anchor" href="#&#x8BF4;&#x8BF4;&#x7EBF;&#x7A0B;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x8BF4;&#x8BF4;&#x7EBF;&#x7A0B;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF1F;</h3>
<p><img src="https://www.pdai.tech/_images/pics/ace830df-9919-48ca-91b5-60b193f593d2.png" alt="img"></p>
<p>&#x7EBF;&#x7A0B;&#x521B;&#x5EFA;&#x4E4B;&#x540E;&#x5B83;&#x5C06;&#x5904;&#x4E8E;<code>New</code>&#xFF08;&#x65B0;&#x5EFA;&#xFF09;&#x72B6;&#x6001;&#xFF0C;&#x8C03;&#x7528; <code>start()</code> &#x65B9;&#x6CD5;&#x540E;&#x5F00;&#x59CB;&#x8FD0;&#x884C;&#xFF0C;&#x7EBF;&#x7A0B;&#x8FD9;&#x65F6;&#x5019;&#x5904;&#x4E8E; <code>READY</code>&#xFF08;&#x53EF;&#x8FD0;&#x884C;&#xFF09; &#x72B6;&#x6001;&#x3002;&#x53EF;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#x7684;&#x7EBF;&#x7A0B;&#x83B7;&#x5F97;&#x4E86; CPU &#x65F6;&#x95F4;&#x7247;&#xFF08;timeslice&#xFF09;&#x540E;&#x5C31;&#x5904;&#x4E8E; <code>RUNNING</code>&#xFF08;&#x8FD0;&#x884C;&#xFF09; &#x72B6;&#x6001;&#x3002;</p>
<p>&#x5F53;&#x7EBF;&#x7A0B;&#x6267;&#x884C; <code>wait()</code>&#x65B9;&#x6CD5;&#x4E4B;&#x540E;&#xFF0C;&#x7EBF;&#x7A0B;&#x8FDB;&#x5165; <code>WAITING</code>&#xFF08;&#x7B49;&#x5F85;&#xFF09; &#x72B6;&#x6001;&#x3002;&#x8FDB;&#x5165;&#x7B49;&#x5F85;&#x72B6;&#x6001;&#x7684;&#x7EBF;&#x7A0B;&#x9700;&#x8981;&#x4F9D;&#x9760;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x7684;&#x901A;&#x77E5;&#x624D;&#x80FD;&#x591F;&#x8FD4;&#x56DE;&#x5230;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#xFF0C;&#x800C; <code>TIME_WAITING</code>(&#x8D85;&#x65F6;&#x7B49;&#x5F85;) &#x72B6;&#x6001;&#x76F8;&#x5F53;&#x4E8E;&#x5728;&#x7B49;&#x5F85;&#x72B6;&#x6001;&#x7684;&#x57FA;&#x7840;&#x4E0A;&#x589E;&#x52A0;&#x4E86;&#x8D85;&#x65F6;&#x9650;&#x5236;&#xFF0C;&#x6BD4;&#x5982;&#x901A;&#x8FC7; <code>sleep&#xFF08;long millis&#xFF09;</code>&#x65B9;&#x6CD5;&#x6216; <code>wait&#xFF08;long millis&#xFF09;</code>&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x5C06; Java &#x7EBF;&#x7A0B;&#x7F6E;&#x4E8E; <code>TIMED WAITING</code> &#x72B6;&#x6001;&#x3002;&#x5F53;&#x8D85;&#x65F6;&#x65F6;&#x95F4;&#x5230;&#x8FBE;&#x540E; Java &#x7EBF;&#x7A0B;&#x5C06;&#x4F1A;&#x8FD4;&#x56DE;&#x5230; RUNNABLE &#x72B6;&#x6001;&#x3002;&#x5F53;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;&#x540C;&#x6B65;&#x65B9;&#x6CD5;&#x65F6;&#xFF0C;&#x5728;&#x6CA1;&#x6709;&#x83B7;&#x53D6;&#x5230;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x7EBF;&#x7A0B;&#x5C06;&#x4F1A;&#x8FDB;&#x5165;&#x5230; <code>BLOCKED</code>&#xFF08;&#x963B;&#x585E;&#xFF09;&#x72B6;&#x6001;&#x3002;&#x7EBF;&#x7A0B;&#x5728;&#x6267;&#x884C; Runnable &#x7684;<code>run()</code>&#x65B9;&#x6CD5;&#x4E4B;&#x540E;&#x5C06;&#x4F1A;&#x8FDB;&#x5165;&#x5230; <code>TERMINATED</code>&#xFF08;&#x7EC8;&#x6B62;&#xFF09; &#x72B6;&#x6001;&#x3002;</p>
<h3 id="&#x4EC0;&#x4E48;&#x662F;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF1F;"><a name="&#x4EC0;&#x4E48;&#x662F;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4EC0;&#x4E48;&#x662F;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF1F;" class="plugin-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4EC0;&#x4E48;&#x662F;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF1F;</h3>
<p>&#x591A;&#x7EBF;&#x7A0B;&#x7F16;&#x7A0B;&#x4E2D;&#x4E00;&#x822C;<strong>&#x7EBF;&#x7A0B;&#x7684;&#x4E2A;&#x6570;&#x90FD;&#x5927;&#x4E8E; CPU &#x6838;&#x5FC3;&#x7684;&#x4E2A;&#x6570;</strong>&#xFF0C;&#x800C;&#x4E00;&#x4E2A; CPU &#x6838;&#x5FC3;&#x5728;&#x4EFB;&#x610F;&#x65F6;&#x523B;&#x53EA;&#x80FD;&#x88AB;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;&#xFF0C;&#x4E3A;&#x4E86;&#x8BA9;&#x8FD9;&#x4E9B;&#x7EBF;&#x7A0B;&#x90FD;&#x80FD;&#x5F97;&#x5230;&#x6709;&#x6548;&#x6267;&#x884C;&#xFF0C;CPU &#x91C7;&#x53D6;&#x7684;&#x7B56;&#x7565;&#x662F;&#x4E3A;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x5206;&#x914D;<strong>&#x65F6;&#x95F4;&#x7247;&#x5E76;&#x8F6E;&#x8F6C;</strong>&#x7684;&#x5F62;&#x5F0F;&#x3002;&#x5F53;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x65F6;&#x95F4;&#x7247;&#x7528;&#x5B8C;&#x7684;&#x65F6;&#x5019;&#x5C31;&#x4F1A;&#x91CD;&#x65B0;&#x5904;&#x4E8E;&#x5C31;&#x7EEA;&#x72B6;&#x6001;&#x8BA9;&#x7ED9;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;&#xFF0C;&#x8FD9;&#x4E2A;&#x8FC7;&#x7A0B;&#x5C31;&#x5C5E;&#x4E8E;&#x4E00;&#x6B21;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#x3002;</p>
<p>&#x5B9E;&#x9645;&#x4E0A;&#x5C31;&#x662F;<strong>&#x4EFB;&#x52A1;&#x4ECE;&#x4FDD;&#x5B58;&#x5230;&#x518D;&#x52A0;&#x8F7D;&#x7684;&#x8FC7;&#x7A0B;&#x5C31;&#x662F;&#x4E00;&#x6B21;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;</strong>&#x3002;</p>
<p>&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#x901A;&#x5E38;&#x662F;&#x8BA1;&#x7B97;&#x5BC6;&#x96C6;&#x578B;&#x7684;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x5B83;&#x9700;&#x8981;&#x76F8;&#x5F53;&#x53EF;&#x89C2;&#x7684;&#x5904;&#x7406;&#x5668;&#x65F6;&#x95F4;&#xFF0C;&#x5728;&#x6BCF;&#x79D2;&#x51E0;&#x5341;&#x4E0A;&#x767E;&#x6B21;&#x7684;&#x5207;&#x6362;&#x4E2D;&#xFF0C;&#x6BCF;&#x6B21;&#x5207;&#x6362;&#x90FD;&#x9700;&#x8981;&#x7EB3;&#x79D2;&#x91CF;&#x7EA7;&#x7684;&#x65F6;&#x95F4;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#x5BF9;&#x7CFB;&#x7EDF;&#x6765;&#x8BF4;&#x610F;&#x5473;&#x7740;&#x6D88;&#x8017;&#x5927;&#x91CF;&#x7684; CPU &#x65F6;&#x95F4;&#xFF0C;&#x4E8B;&#x5B9E;&#x4E0A;&#xFF0C;&#x53EF;&#x80FD;&#x662F;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E2D;&#x65F6;&#x95F4;&#x6D88;&#x8017;&#x6700;&#x5927;&#x7684;&#x64CD;&#x4F5C;&#x3002;</p>
<p>Linux &#x76F8;&#x6BD4;&#x4E0E;&#x5176;&#x4ED6;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#xFF08;&#x5305;&#x62EC;&#x5176;&#x4ED6;&#x7C7B; Unix &#x7CFB;&#x7EDF;&#xFF09;&#x6709;&#x5F88;&#x591A;&#x7684;&#x4F18;&#x70B9;&#xFF0C;&#x5176;&#x4E2D;&#x6709;&#x4E00;&#x9879;&#x5C31;&#x662F;&#xFF0C;&#x5176;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#x548C;&#x6A21;&#x5F0F;&#x5207;&#x6362;&#x7684;&#x65F6;&#x95F4;&#x6D88;&#x8017;&#x975E;&#x5E38;&#x5C11;&#x3002;</p>
<h3 id="&#x4EC0;&#x4E48;&#x662F;&#x6B7B;&#x9501;&#xFF1F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;"><a name="&#x4EC0;&#x4E48;&#x662F;&#x6B7B;&#x9501;&#xFF1F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x6B7B;&#x9501;&#xFF1F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4EC0;&#x4E48;&#x662F;&#x6B7B;&#x9501;&#xFF1F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;" class="plugin-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x6B7B;&#x9501;&#xFF1F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4EC0;&#x4E48;&#x662F;&#x6B7B;&#x9501;&#xFF1F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;</h3>
<p>&#x5982;&#x4E0B;&#x56FE;&#x6240;&#x793A;&#xFF0C;&#x7EBF;&#x7A0B; A &#x6301;&#x6709;&#x8D44;&#x6E90; 2&#xFF0C;&#x7EBF;&#x7A0B; B &#x6301;&#x6709;&#x8D44;&#x6E90; 1&#xFF0C;&#x4ED6;&#x4EEC;&#x540C;&#x65F6;&#x90FD;&#x60F3;&#x7533;&#x8BF7;&#x5BF9;&#x65B9;&#x7684;&#x8D44;&#x6E90;&#xFF0C;&#x6240;&#x4EE5;&#x8FD9;&#x4E24;&#x4E2A;&#x7EBF;&#x7A0B;&#x5C31;&#x4F1A;&#x4E92;&#x76F8;&#x7B49;&#x5F85;&#x800C;&#x8FDB;&#x5165;&#x6B7B;&#x9501;&#x72B6;&#x6001;&#x3002;</p>
<p><img src="https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-4/2019-4&#x6B7B;&#x9501;1.png" alt="&#x7EBF;&#x7A0B;&#x6B7B;&#x9501;&#x793A;&#x610F;&#x56FE; "></p>
<p>&#x5B66;&#x8FC7;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x670B;&#x53CB;&#x90FD;&#x77E5;&#x9053;&#x4EA7;&#x751F;&#x6B7B;&#x9501;&#x5FC5;&#x987B;&#x5177;&#x5907;&#x4EE5;&#x4E0B;&#x56DB;&#x4E2A;&#x6761;&#x4EF6;&#xFF1A;</p>
<ul>
<li>&#x4E92;&#x65A5;&#x6761;&#x4EF6;&#xFF1A;&#x8BE5;&#x8D44;&#x6E90;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;&#x65F6;&#x523B;&#x53EA;&#x7531;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5360;&#x7528;&#x3002;(&#x540C;&#x4E00;&#x65F6;&#x523B;&#xFF0C;&#x8FD9;&#x4E2A;&#x7897;&#x662F;&#x6211;&#x7684;&#xFF0C;&#x4F60;&#x4E0D;&#x80FD;&#x78B0;)</li>
<li>&#x8BF7;&#x6C42;&#x4E0E;&#x4FDD;&#x6301;&#x6761;&#x4EF6;&#xFF1A;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x56E0;&#x8BF7;&#x6C42;&#x8D44;&#x6E90;&#x800C;&#x963B;&#x585E;&#x65F6;&#xFF0C;&#x5BF9;&#x5DF2;&#x83B7;&#x5F97;&#x7684;&#x8D44;&#x6E90;&#x4FDD;&#x6301;&#x4E0D;&#x653E;&#x3002;&#xFF08;&#x6211;&#x62FF;&#x7740;&#x8FD9;&#x4E2A;&#x7897;&#x4E00;&#x76F4;&#x4E0D;&#x653E;&#xFF09;</li>
<li>&#x4E0D;&#x5265;&#x593A;&#x6761;&#x4EF6;:&#x7EBF;&#x7A0B;&#x5DF2;&#x83B7;&#x5F97;&#x7684;&#x8D44;&#x6E90;&#x5728;&#x672B;&#x4F7F;&#x7528;&#x5B8C;&#x4E4B;&#x524D;&#x4E0D;&#x80FD;&#x88AB;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5F3A;&#x884C;&#x5265;&#x593A;&#xFF0C;&#x53EA;&#x6709;&#x81EA;&#x5DF1;&#x4F7F;&#x7528;&#x5B8C;&#x6BD5;&#x540E;&#x624D;&#x91CA;&#x653E;&#x8D44;&#x6E90;&#x3002;&#xFF08;&#x6211;&#x7897;&#x4E2D;&#x7684;&#x996D;&#x6CA1;&#x5403;&#x5B8C;&#xFF0C;&#x4F60;&#x4E0D;&#x80FD;&#x62A2;&#xFF0C;&#x91CA;&#x653E;&#x6743;&#x662F;&#x6211;&#x81EA;&#x5DF1;&#x7684;&#xFF0C;&#x6211;&#x60F3;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x653E;&#x5C31;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x653E;&#xFF09;</li>
<li>&#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x6761;&#x4EF6;:&#x82E5;&#x5E72;&#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;&#x5F62;&#x6210;&#x4E00;&#x79CD;&#x5934;&#x5C3E;&#x76F8;&#x63A5;&#x7684;&#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x8D44;&#x6E90;&#x5173;&#x7CFB;&#x3002;&#xFF08;&#x6211;&#x62FF;&#x4E86;A&#x7897;&#xFF0C;&#x4F60;&#x62FF;&#x4E86;B&#x7897;&#xFF0C;&#x4F46;&#x662F;&#x6211;&#x8FD8;&#x60F3;&#x8981;&#x4F60;&#x7684;B&#x7897;&#xFF0C;&#x4F60;&#x8FD8;&#x60F3;&#x6211;&#x7684;A&#x7897;&#xFF09;</li>
</ul>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DeadLockDemo</span> </span>{
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> Object resource1 = <span class="hljs-keyword">new</span> Object();<span class="hljs-comment">//&#x8D44;&#x6E90; 1</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> Object resource2 = <span class="hljs-keyword">new</span> Object();<span class="hljs-comment">//&#x8D44;&#x6E90; 2</span>

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        <span class="hljs-keyword">new</span> Thread(() -&gt; {
            <span class="hljs-keyword">synchronized</span> (resource1) {
                System.out.println(Thread.currentThread() + <span class="hljs-string">&quot;get resource1&quot;</span>);
                <span class="hljs-keyword">try</span> {
                    Thread.sleep(<span class="hljs-number">1000</span>);
                } <span class="hljs-keyword">catch</span> (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread() + <span class="hljs-string">&quot;waiting get resource2&quot;</span>);
                <span class="hljs-keyword">synchronized</span> (resource2) {
                    System.out.println(Thread.currentThread() + <span class="hljs-string">&quot;get resource2&quot;</span>);
                }
            }
        }, <span class="hljs-string">&quot;&#x7EBF;&#x7A0B; 1&quot;</span>).start();

        <span class="hljs-keyword">new</span> Thread(() -&gt; {
            <span class="hljs-keyword">synchronized</span> (resource2) {
                System.out.println(Thread.currentThread() + <span class="hljs-string">&quot;get resource2&quot;</span>);
                <span class="hljs-keyword">try</span> {
                    Thread.sleep(<span class="hljs-number">1000</span>);
                } <span class="hljs-keyword">catch</span> (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread() + <span class="hljs-string">&quot;waiting get resource1&quot;</span>);
                <span class="hljs-keyword">synchronized</span> (resource1) {
                    System.out.println(Thread.currentThread() + <span class="hljs-string">&quot;get resource1&quot;</span>);
                }
            }
        }, <span class="hljs-string">&quot;&#x7EBF;&#x7A0B; 2&quot;</span>).start();
    }
}
Thread[&#x7EBF;&#x7A0B; <span class="hljs-number">1</span>,<span class="hljs-number">5</span>,main]get resource1
Thread[&#x7EBF;&#x7A0B; <span class="hljs-number">2</span>,<span class="hljs-number">5</span>,main]get resource2
Thread[&#x7EBF;&#x7A0B; <span class="hljs-number">1</span>,<span class="hljs-number">5</span>,main]waiting get resource2
Thread[&#x7EBF;&#x7A0B; <span class="hljs-number">2</span>,<span class="hljs-number">5</span>,main]waiting get resource1
</code></pre>
<p>&#x7EBF;&#x7A0B; A &#x901A;&#x8FC7; <code>synchronized (resource1)</code> &#x83B7;&#x5F97; resource1 &#x7684;&#x76D1;&#x89C6;&#x5668;&#x9501;&#xFF0C;&#x7136;&#x540E;&#x901A;&#x8FC7;<code>Thread.sleep(1000);</code>&#x8BA9;&#x7EBF;&#x7A0B; A &#x4F11;&#x7720; 1s &#x4E3A;&#x7684;&#x662F;&#x8BA9;&#x7EBF;&#x7A0B; B &#x5F97;&#x5230;&#x6267;&#x884C;&#x7136;&#x540E;&#x83B7;&#x53D6;&#x5230; resource2 &#x7684;&#x76D1;&#x89C6;&#x5668;&#x9501;&#x3002;&#x7EBF;&#x7A0B; A &#x548C;&#x7EBF;&#x7A0B; B &#x4F11;&#x7720;&#x7ED3;&#x675F;&#x4E86;&#x90FD;&#x5F00;&#x59CB;&#x4F01;&#x56FE;&#x8BF7;&#x6C42;&#x83B7;&#x53D6;&#x5BF9;&#x65B9;&#x7684;&#x8D44;&#x6E90;&#xFF0C;&#x7136;&#x540E;&#x8FD9;&#x4E24;&#x4E2A;&#x7EBF;&#x7A0B;&#x5C31;&#x4F1A;&#x9677;&#x5165;&#x4E92;&#x76F8;&#x7B49;&#x5F85;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x8FD9;&#x4E5F;&#x5C31;&#x4EA7;&#x751F;&#x4E86;&#x6B7B;&#x9501;&#x3002;&#x4E0A;&#x9762;&#x7684;&#x4F8B;&#x5B50;&#x7B26;&#x5408;&#x4EA7;&#x751F;&#x6B7B;&#x9501;&#x7684;&#x56DB;&#x4E2A;&#x5FC5;&#x8981;&#x6761;&#x4EF6;&#x3002;</p>
<h4 id="&#x5982;&#x4F55;&#x627E;&#x5230;&#x6B7B;&#x9501;"><a name="&#x5982;&#x4F55;&#x627E;&#x5230;&#x6B7B;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x5982;&#x4F55;&#x627E;&#x5230;&#x6B7B;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5982;&#x4F55;&#x627E;&#x5230;&#x6B7B;&#x9501;" class="plugin-anchor" href="#&#x5982;&#x4F55;&#x627E;&#x5230;&#x6B7B;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5982;&#x4F55;&#x627E;&#x5230;&#x6B7B;&#x9501;</h4>
<p>Jstack&#x67E5;&#x770B;&#x6B7B;&#x9501;&#xFF1A;</p>
<p>&#x540C;&#x6837;&#xFF0C;&#x4E5F;&#x662F;&#x8FDB;&#x5165;jdk&#x5B89;&#x88C5;&#x76EE;&#x5F55;&#x7684;bin&#x4E0B;&#x9762;&#xFF0C;&#x8F93;&#x5165;jps&#xFF0C;&#x5148;&#x67E5;&#x770B;&#x6211;&#x4EEC;&#x8981;&#x68C0;&#x6D4B;&#x6B7B;&#x9501;&#x7684;&#x8FDB;&#x7A0B;&#xFF1A;</p>
<p><img src="https://img-blog.csdn.net/20160829115959999?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="img"></p>
<p>&#x7136;&#x540E;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x8FDB;&#x7A0B;Test&#x7684;&#x8FDB;&#x7A0B;&#x53F7;&#xFF1A;8384&#xFF0C;&#x7136;&#x540E;&#x6267;&#x884C;&#xFF1A;Jstack -l 8384</p>
<p><img src="https://img-blog.csdn.net/20160829124553194?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="img"></p>
<p>&#x67E5;&#x770B;&#x6B7B;&#x9501;&#x4FE1;&#x606F;&#xFF1A;</p>
<p><img src="https://gitee.com/zisuu/picture/raw/master/img/20201218205529.png" alt="image-20201218205529322"></p>
<h4 id="&#x5982;&#x4F55;&#x907F;&#x514D;&#x4E0E;&#x9884;&#x9632;&#x6B7B;&#x9501;"><a name="&#x5982;&#x4F55;&#x907F;&#x514D;&#x4E0E;&#x9884;&#x9632;&#x6B7B;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x5982;&#x4F55;&#x907F;&#x514D;&#x4E0E;&#x9884;&#x9632;&#x6B7B;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5982;&#x4F55;&#x907F;&#x514D;&#x4E0E;&#x9884;&#x9632;&#x6B7B;&#x9501;" class="plugin-anchor" href="#&#x5982;&#x4F55;&#x907F;&#x514D;&#x4E0E;&#x9884;&#x9632;&#x6B7B;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5982;&#x4F55;&#x907F;&#x514D;&#x4E0E;&#x9884;&#x9632;&#x6B7B;&#x9501;</h4>
<h5 id="1-&#x6B7B;&#x9501;&#x907F;&#x514D;"><a name="1-&#x6B7B;&#x9501;&#x907F;&#x514D;" class="anchor-navigation-ex-anchor" href="#1-&#x6B7B;&#x9501;&#x907F;&#x514D;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="1-&#x6B7B;&#x9501;&#x907F;&#x514D;" class="plugin-anchor" href="#1-&#x6B7B;&#x9501;&#x907F;&#x514D;"><i class="fa fa-link" aria-hidden="true"></i></a>1. &#x6B7B;&#x9501;&#x907F;&#x514D;</h5>
<p>&#x6B7B;&#x9501;&#x907F;&#x514D;&#x7684;&#x57FA;&#x672C;&#x601D;&#x60F3;&#xFF1A;&#x7CFB;&#x7EDF;&#x5BF9;&#x8FDB;&#x7A0B;&#x53D1;&#x51FA;&#x7684;&#x6BCF;&#x4E00;&#x4E2A;&#x7CFB;&#x7EDF;&#x80FD;&#x591F;&#x6EE1;&#x8DB3;&#x7684;&#x8D44;&#x6E90;&#x7533;&#x8BF7;&#x8FDB;&#x884C;&#x52A8;&#x6001;&#x68C0;&#x67E5;&#xFF0C;&#x5E76;&#x6839;&#x636E;&#x68C0;&#x67E5;&#x7ED3;&#x679C;&#x51B3;&#x5B9A;&#x662F;&#x5426;&#x5206;&#x914D;&#x8D44;&#x6E90;&#xFF0C;&#x5982;&#x679C;&#x5206;&#x914D;&#x540E;&#x7CFB;&#x7EDF;&#x53EF;&#x80FD;&#x53D1;&#x751F;&#x6B7B;&#x9501;&#xFF0C;&#x5219;&#x4E0D;&#x4E88;&#x5206;&#x914D;&#xFF0C;&#x5426;&#x5219;&#x4E88;&#x4EE5;&#x5206;&#x914D;&#xFF0C;&#x8FD9;&#x662F;&#x4E00;&#x79CD;&#x4FDD;&#x8BC1;&#x7CFB;&#x7EDF;&#x4E0D;&#x8FDB;&#x5165;&#x6B7B;&#x9501;&#x72B6;&#x6001;&#x7684;&#x52A8;&#x6001;&#x7B56;&#x7565;&#x3002; 
&#x5982;&#x679C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x80FD;&#x4FDD;&#x8BC1;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#x5728;&#x6709;&#x9650;&#x65F6;&#x95F4;&#x5185;&#x5F97;&#x5230;&#x9700;&#x8981;&#x7684;&#x5168;&#x90E8;&#x8D44;&#x6E90;&#xFF0C;&#x5219;&#x7CFB;&#x7EDF;&#x5904;&#x4E8E;&#x5B89;&#x5168;&#x72B6;&#x6001;&#x5426;&#x5219;&#x7CFB;&#x7EDF;&#x662F;&#x4E0D;&#x5B89;&#x5168;&#x7684;&#x3002;</p>
<ol>
<li><ol>
<li>&#x5B89;&#x5168;&#x72B6;&#x6001;&#x662F;&#x6307;&#xFF1A;&#x5982;&#x679C;&#x7CFB;&#x7EDF;&#x5B58;&#x5728; &#x7531;&#x6240;&#x6709;&#x7684;&#x5B89;&#x5168;&#x5E8F;&#x5217;{P1&#xFF0C;P2&#xFF0C;&#x2026;Pn},&#x5219;&#x7CFB;&#x7EDF;&#x5904;&#x4E8E;&#x5B89;&#x5168;&#x72B6;&#x6001;&#x3002;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x5E8F;&#x5217;&#x662F;&#x5B89;&#x5168;&#x7684;&#xFF0C;&#x5982;&#x679C;&#x5BF9;&#x5176;&#x4E2D;&#x6BCF;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;Pi(i &gt;=1 &amp;&amp; i &lt;= n)&#x4ED6;&#x4EE5;&#x540E;&#x5C1A;&#x9700;&#x8981;&#x7684;&#x8D44;&#x6E90;&#x4E0D;&#x8D85;&#x8FC7;&#x7CFB;&#x7EDF;&#x5F53;&#x524D;&#x5269;&#x4F59;&#x8D44;&#x6E90;&#x91CF;&#x4E0E;&#x6240;&#x6709;&#x8FDB;&#x7A0B;Pj(j &lt; i)&#x5F53;&#x524D;&#x5360;&#x6709;&#x8D44;&#x6E90;&#x91CF;&#x4E4B;&#x548C;&#xFF0C;&#x7CFB;&#x7EDF;&#x5904;&#x4E8E;&#x5B89;&#x5168;&#x72B6;&#x6001;&#x5219;&#x4E0D;&#x4F1A;&#x53D1;&#x751F;&#x6B7B;&#x9501;&#x3002;</li>
<li>&#x4E0D;&#x5B89;&#x5168;&#x72B6;&#x6001;&#xFF1A;<em>&#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x5B89;&#x5168;&#x5E8F;&#x5217;&#xFF0C;&#x5219;&#x7CFB;&#x7EDF;&#x5904;&#x4E8E;&#x4E0D;&#x5B89;&#x5168;&#x72B6;&#x6001;</em>&#x3002;&#x4ED6;&#x4EEC;&#x4E4B;&#x95F4;&#x7684;&#x5BF9;&#x5BF9;&#x5E94;&#x5173;&#x7CFB;&#x5982;&#x4E0B;&#x56FE;&#x6240;&#x793A;&#xFF1A;</li>
</ol>
<p><img src="https://images2018.cnblogs.com/blog/919698/201806/919698-20180626141016968-2091728327.png" alt="img"></p>
</li>
</ol>
<p>&#x4E0B;&#x9762;&#x6211;&#x4EEC;&#x6765;&#x901A;&#x8FC7;&#x4E00;&#x4E2A;&#x4F8B;&#x5B50;&#x5BF9;&#x5B89;&#x5168;&#x72B6;&#x6001;&#x548C;&#x4E0D;&#x5B89;&#x5168;&#x72B6;&#x6001;&#x8FDB;&#x884C;&#x66F4;&#x6DF1;&#x7684;&#x4E86;&#x89E3; </p>
<p><img src="https://images2018.cnblogs.com/blog/919698/201806/919698-20180626141029122-1344342599.png" alt="img"></p>
<p>&#x5982;&#x4E0A;&#x56FE;&#x6240;&#x793A;&#x7CFB;&#x7EDF;&#x5904;&#x4E8E;&#x5B89;&#x5168;&#x72B6;&#x6001;&#xFF0C;&#x7CFB;&#x7EDF;&#x5269;&#x4F59;3&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x53EF;&#x4EE5;&#x628A;&#x5176;&#x4E2D;&#x7684;2&#x4E2A;&#x5206;&#x914D;&#x7ED9;P3&#xFF0C;&#x6B64;&#x65F6;P3&#x5DF2;&#x7ECF;&#x83B7;&#x5F97;&#x4E86;&#x6240;&#x6709;&#x7684;&#x8D44;&#x6E90;&#xFF0C;&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#x540E;&#x8FD8;&#x80FD;&#x8FD8;&#x7ED9;&#x7CFB;&#x7EDF;4&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x6B64;&#x65F6;&#x7CFB;&#x7EDF;&#x5269;&#x4F59;5&#x4E2A;&#x8D44;&#x6E90;&#x6240;&#x4EE5;&#x6EE1;&#x8DB3;&#xFF08;P2&#x6240;&#x9700;&#x7684;&#x8D44;&#x6E90;&#x4E0D;&#x8D85;&#x8FC7;&#x7CFB;&#x7EDF;&#x5F53;&#x524D;&#x5269;&#x4F59;&#x91CF;&#x4E0E;P3&#x5F53;&#x524D;&#x5360;&#x6709;&#x8D44;&#x6E90;&#x91CF;&#x4E4B;&#x548C;&#xFF09;&#xFF0C;&#x540C;&#x7406;P1&#x4E5F;&#x53EF;&#x4EE5;&#x5728;P2&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#x540E;&#x83B7;&#x5F97;&#x81EA;&#x5DF1;&#x9700;&#x8981;&#x7684;&#x8D44;&#x6E90;&#x3002; 
&#x5982;&#x679C;P1&#x63D0;&#x51FA;&#x518D;&#x7533;&#x8BF7;&#x4E00;&#x4E2A;&#x8D44;&#x6E90;&#x7684;&#x8981;&#x6C42;&#xFF0C;&#x7CFB;&#x7EDF;&#x4ECE;&#x5269;&#x4F59;&#x7684;&#x8D44;&#x6E90;&#x4E2D;&#x5206;&#x914D;&#x4E00;&#x4E2A;&#x7ED9;&#x8FDB;&#x7A0B;P1&#xFF0C;&#x6B64;&#x65F6;&#x7CFB;&#x7EDF;&#x5269;&#x4F59;2&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x65B0;&#x7684;&#x72B6;&#x6001;&#x56FE;&#x5982;&#x4E0B;&#xFF1A;&#x90A3;&#x4E48;&#x662F;&#x5426;&#x4ECD;&#x662F;&#x5B89;&#x5168;&#x5E8F;&#x5217;&#x5462;&#x90A3;&#x6211;&#x4EEC;&#x6765;&#x5206;&#x6790;&#x4E00;&#x4E0B; </p>
<p><img src="https://images2018.cnblogs.com/blog/919698/201806/919698-20180626141054904-936962867.png" alt="img"></p>
<p>&#x7CFB;&#x7EDF;&#x5F53;&#x524D;&#x5269;&#x4F59;2&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x5206;&#x914D;&#x7ED9;P3&#x540E;P3&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#x8FD8;&#x7ED9;&#x7CFB;&#x7EDF;4&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x4F46;&#x662F;P2&#x9700;&#x8981;5&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;P1&#x9700;&#x8981;6&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x4ED6;&#x4EEC;&#x90FD;&#x65E0;&#x6CD5;&#x83B7;&#x5F97;&#x8D44;&#x6E90;&#x6267;&#x884C;&#x5B8C;&#x6210;&#xFF0C;&#x56E0;&#x6B64;&#x627E;&#x4E0D;&#x5230;&#x4E00;&#x4E2A;&#x5B89;&#x5168;&#x5E8F;&#x5217;&#x3002;&#x6B64;&#x65F6;&#x7CFB;&#x7EDF;&#x8F6C;&#x5230;&#x4E86;&#x4E0D;&#x5B89;&#x5168;&#x72B6;&#x6001;&#x3002;</p>
<h5 id="2-&#x6B7B;&#x9501;&#x9884;&#x9632;"><a name="2-&#x6B7B;&#x9501;&#x9884;&#x9632;" class="anchor-navigation-ex-anchor" href="#2-&#x6B7B;&#x9501;&#x9884;&#x9632;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="2-&#x6B7B;&#x9501;&#x9884;&#x9632;" class="plugin-anchor" href="#2-&#x6B7B;&#x9501;&#x9884;&#x9632;"><i class="fa fa-link" aria-hidden="true"></i></a>2. &#x6B7B;&#x9501;&#x9884;&#x9632;</h5>
<p><strong>&#x7834;&#x574F;&#x4E92;&#x65A5;&#x6761;&#x4EF6;</strong></p>
<ul>
<li>&#x5982;&#x679C;&#x8D44;&#x6E90;&#x4E0D;&#x9700;&#x8981;&#x4E92;&#x65A5;&#x8BBF;&#x95EE;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x7834;&#x574F;&#x4E92;&#x65A5;&#x6761;&#x4EF6;&#x3002;</li>
<li>&#x5BF9;&#x4E8E;&#x67D0;&#x4E9B;&#x786C;&#x4EF6;&#x8D44;&#x6E90;&#xFF0C;&#x53EF;&#x4EE5;&#x91C7;&#x7528;&#x7279;&#x6B8A;&#x6280;&#x672F;&#x5B9E;&#x73B0;&#x5141;&#x8BB8;&#x540C;&#x65F6;&#x8BBF;&#x95EE;&#xFF1B;</li>
<li>&#x5BF9;&#x4E8E;&#x8F6F;&#x4EF6;&#x8D44;&#x6E90;&#xFF0C;&#x65E0;&#x6CD5;&#x5B9E;&#x73B0;&#x3002;</li>
</ul>
<p><strong>&#x7834;&#x574F;&#x8BF7;&#x6C42;&#x548C;&#x4FDD;&#x6301;&#x6761;&#x4EF6;</strong></p>
<ul>
<li>&#x5728;&#x6267;&#x884C;&#x65F6;&#x4E0D;&#x518D;&#x63D0;&#x51FA;&#x8D44;&#x6E90;&#x8BF7;&#x6C42;
&#x7CFB;&#x7EDF;&#x8981;&#x6C42;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#x8981;&#x4E00;&#x6B21;&#x6027;&#x5730;&#x7533;&#x8BF7;&#x5728;&#x6574;&#x4E2A;&#x8FD0;&#x884C;&#x8FC7;&#x7A0B;&#x4E2D;&#x6240;&#x9700;&#x7684;&#x5168;&#x90E8;&#x8D44;&#x6E90;&#x3002;&#x82E5;&#x7CFB;&#x7EDF;&#x6709;&#x8DB3;&#x591F;&#x8D44;&#x6E90;&#x5219;&#x5B8C;&#x5168;&#x5206;&#x914D;&#x3002;
&#x5728;&#x7B49;&#x5F85;&#x65F6;&#x4E0D;&#x4FDD;&#x6301;&#x4EFB;&#x4F55;&#x8D44;&#x6E90;</li>
<li>&#x53EA;&#x8981;&#x6709;&#x4E00;&#x4E2A;&#x8BF7;&#x6C42;&#x7684;&#x8D44;&#x6E90;&#x4E0D;&#x53EF;&#x7528;&#xFF0C;&#x5C31;&#x5176;&#x5B83;&#x53EF;&#x7528;&#x8D44;&#x6E90;&#x90FD;&#x4E0D;&#x5206;&#x914D;&#x7ED9;&#x5B83;&#x3002;</li>
</ul>
<p><strong>&#x7834;&#x574F;&#x4E0D;&#x53EF;&#x5265;&#x593A;&#x6761;&#x4EF6;</strong></p>
<ul>
<li>&#x4E00;&#x4E2A;&#x5DF2;&#x62E5;&#x6709;&#x8D44;&#x6E90;&#x7684;&#x8FDB;&#x7A0B;&#xFF0C;&#x82E5;&#x5B83;&#x518D;&#x63D0;&#x51FA;&#x65B0;&#x8D44;&#x6E90;&#x8981;&#x6C42;&#x800C;&#x4E0D;&#x80FD;&#x7ACB;&#x5373;&#x5F97;&#x5230;&#x6EE1;&#x8DB3;&#x65F6;&#xFF0C;&#x5B83;&#x5FC5;&#x987B;&#x91CA;&#x653E;&#x5DF2;&#x7ECF;&#x62E5;&#x6709;&#x7684;&#x6240;&#x6709;&#x8D44;&#x6E90;&#x3002;&#x4EE5;&#x540E;&#x9700;&#x8981;&#x65F6;&#x518D;&#x91CD;&#x65B0;&#x7533;&#x8BF7;&#x3002;</li>
<li>&#x5B9E;&#x73B0;&#x590D;&#x6742;&#x4E14;&#x8981;&#x4ED8;&#x51FA;&#x5F88;&#x5927;&#x7684;&#x4EE3;&#x4EF7;&#xFF08;&#x4EE5;&#x524D;&#x5DE5;&#x4F5C;&#x7684;&#x5931;&#x6548;&#xFF0C;&#x6267;&#x884C;&#x7684;&#x63A8;&#x8FDF;&#xFF09;</li>
</ul>
<p><strong>&#x7834;&#x574F;&#x73AF;&#x8DEF;&#x6761;&#x4EF6;</strong></p>
<p>&#x5C06;&#x7CFB;&#x7EDF;&#x8D44;&#x6E90;&#x8FDB;&#x884C;&#x7EDF;&#x4E00;&#x6392;&#x961F;&#xFF0C;&#x8D4B;&#x4E88;&#x4E0D;&#x540C;&#x7F16;&#x53F7;&#xFF1B;&#x8981;&#x6C42;&#x8FDB;&#x7A0B;&#x7533;&#x8BF7;&#x8D44;&#x6E90;&#x65F6;&#xFF0C;&#x5FC5;&#x987B;&#x6309;&#x7167;&#x8D44;&#x6E90;&#x5E8F;&#x53F7;&#x9012;&#x589E;&#x7684;&#x987A;&#x5E8F;&#x63D0;&#x51FA;&#x3002;&#x8FD9;&#x6837;&#x5728;&#x8D44;&#x6E90;&#x5206;&#x914D;&#x56FE;&#x4E2D;&#x5C31;&#x4E0D;&#x53EF;&#x80FD;&#x51FA;&#x73B0;&#x73AF;&#x8DEF;&#xFF0C;&#x7834;&#x574F;&#x4E86;&#x201C;&#x73AF;&#x8DEF;&#x7B49;&#x5F85;&#x201D;&#x6761;&#x4EF6;</p>
<p>&#x4F8B;&#x5982;&#xFF1A;&#x7CFB;&#x7EDF;&#x4E2D;&#x6709;&#x4E0B;&#x5217;&#x8BBE;&#x5907;&#xFF1A;&#x8F93;&#x5165;&#x673A;&#xFF08;1&#xFF09;&#xFF0C;&#x6253;&#x5370;&#x673A;&#xFF08;2&#xFF09;&#xFF0C;&#x7A7F;&#x5B54;&#x673A;&#xFF08;3&#xFF09;&#xFF0C;&#x78C1;&#x5E26;&#x673A;&#xFF08;4&#xFF09;&#xFF0C;&#x78C1;&#x76D8;&#xFF08;5&#xFF09;&#x3002;&#x6709;&#x4E00;&#x8FDB;&#x7A0B;&#x8981;&#x5148;&#x540E;&#x4F7F;&#x7528;&#x8F93;&#x5165;&#x673A;&#x3001;&#x78C1;&#x76D8;&#x3001;&#x6253;&#x5370;&#x673A;&#xFF0C;&#x5219;&#x5B83;&#x7533;&#x8BF7;&#x8BBE;&#x5907;&#x65F6;&#x8981;&#x6309;&#x8F93;&#x5165;&#x673A;&#x3001;&#x6253;&#x5370;&#x673A;&#x3001;&#x78C1;&#x76D8;&#x7684;&#x987A;&#x5E8F;&#x7533;&#x8BF7;&#x3002;</p>
<p>&#x4F18;&#x70B9;&#xFF1A;&#x540C;&#x524D;&#x4E24;&#x6CD5;&#x76F8;&#x6BD4;&#xFF0C;&#x5176;&#x8D44;&#x6E90;&#x5229;&#x7528;&#x7387;&#x548C;&#x7CFB;&#x7EDF;&#x541E;&#x5410;&#x91CF;&#x6709;&#x8F83;&#x660E;&#x663E;&#x7684;&#x6539;&#x5584;&#x3002;</p>
<p>&#x7F3A;&#x70B9;&#xFF1A;&#x8FDB;&#x7A0B;&#x5B9E;&#x9645;&#x9700;&#x8981;&#x8D44;&#x6E90;&#x7684;&#x987A;&#x5E8F;&#x4E0D;&#x4E00;&#x5B9A;&#x4E0E;&#x8D44;&#x6E90;&#x7684;&#x7F16;&#x53F7;&#x4E00;&#x81F4;&#xFF0C;&#x56E0;&#x6B64;&#x4ECD;&#x4F1A;&#x9020;&#x6210;&#x8D44;&#x6E90;&#x6D6A;&#x8D39;&#xFF1B;&#x8D44;&#x6E90;&#x7684;&#x5E8F;&#x53F7;&#x5FC5;&#x987B;&#x76F8;&#x5BF9;&#x7A33;&#x5B9A;&#xFF0C;&#x4ECE;&#x800C;&#x9650;&#x5236;&#x4E86;&#x65B0;&#x8BBE;&#x5907;&#x7684;&#x589E;&#x52A0;&#x3002;</p>
<p>&#x5C0F;&#x7ED3;&#xFF1A;</p>
<ul>
<li>&#x9884;&#x9632;&#x6B7B;&#x9501;&#x7684;&#x539F;&#x7406;&#x4E3A;&#x8BBE;&#x8BA1;&#x4E0D;&#x540C;&#x7684;&#x8D44;&#x6E90;&#x5206;&#x914D;&#x7B97;&#x6CD5;&#xFF0C;&#x6765;&#x4FDD;&#x8BC1;&#x4E0D;&#x53D1;&#x751F;&#x6B7B;&#x9501;&#x3002;</li>
<li>&#x7834;&#x574F;&#x8BF7;&#x6C42;&#x548C;&#x4FDD;&#x6301;&#x6761;&#x4EF6;&#x7684;&#x8D44;&#x6E90;&#x5206;&#x914D;&#x7B97;&#x6CD5;&#x662F;&#x4E00;&#x79CD;&#x9759;&#x6001;&#x8D44;&#x6E90;&#x5206;&#x914D;&#xFF1B;</li>
<li>&#x800C;&#x7834;&#x574F;&#x4E0D;&#x53EF;&#x5265;&#x593A;&#x6761;&#x4EF6;&#x548C;&#x73AF;&#x8DEF;&#x6761;&#x4EF6;&#x662F;&#x52A8;&#x6001;&#x5206;&#x914D;&#x8D44;&#x6E90;&#x7B97;&#x6CD5;&#xFF1B;</li>
<li>&#x7834;&#x574F;&#x73AF;&#x8DEF;&#x6761;&#x4EF6;&#x662F;&#x76F8;&#x5BF9;&#x4F18;&#x5F02;&#x7684;&#x4E00;&#x79CD;&#x9884;&#x9632;&#x6B7B;&#x9501;&#x7B97;&#x6CD5;&#x3002;</li>
</ul>
<h3 id="&#x8BF4;&#x8BF4;sleep&#x548C;wait&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;"><a name="&#x8BF4;&#x8BF4;sleep&#x548C;wait&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;" class="anchor-navigation-ex-anchor" href="#&#x8BF4;&#x8BF4;sleep&#x548C;wait&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x8BF4;&#x8BF4;sleep&#x548C;wait&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;" class="plugin-anchor" href="#&#x8BF4;&#x8BF4;sleep&#x548C;wait&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x8BF4;&#x8BF4;Sleep&#x548C;Wait&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;</h3>
<ul>
<li>&#x4E24;&#x8005;&#x6700;&#x4E3B;&#x8981;&#x7684;&#x533A;&#x522B;&#x5728;&#x4E8E;&#xFF1A;<strong>sleep &#x65B9;&#x6CD5;&#x6CA1;&#x6709;&#x91CA;&#x653E;&#x9501;&#xFF0C;&#x800C; wait &#x65B9;&#x6CD5;&#x91CA;&#x653E;&#x4E86;&#x9501;</strong> &#x3002;</li>
<li>&#x4E24;&#x8005;&#x90FD;&#x53EF;&#x4EE5;&#x6682;&#x505C;&#x7EBF;&#x7A0B;&#x7684;&#x6267;&#x884C;&#x3002;</li>
<li>Wait &#x901A;&#x5E38;&#x88AB;&#x7528;&#x4E8E;&#x7EBF;&#x7A0B;&#x95F4;&#x4EA4;&#x4E92;/&#x901A;&#x4FE1;&#xFF0C;sleep &#x901A;&#x5E38;&#x88AB;&#x7528;&#x4E8E;&#x6682;&#x505C;&#x6267;&#x884C;&#x3002;</li>
<li>wait() &#x65B9;&#x6CD5;&#x88AB;&#x8C03;&#x7528;&#x540E;&#xFF0C;&#x7EBF;&#x7A0B;&#x4E0D;&#x4F1A;&#x81EA;&#x52A8;&#x82CF;&#x9192;&#xFF0C;&#x9700;&#x8981;&#x522B;&#x7684;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;&#x540C;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x4E0A;&#x7684; notify() &#x6216;&#x8005; notifyAll() &#x65B9;&#x6CD5;&#x3002;sleep() &#x65B9;&#x6CD5;&#x6267;&#x884C;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x7EBF;&#x7A0B;&#x4F1A;&#x81EA;&#x52A8;&#x82CF;&#x9192;&#x3002;&#x6216;&#x8005;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;wait(long timeout)&#x8D85;&#x65F6;&#x540E;&#x7EBF;&#x7A0B;&#x4F1A;&#x81EA;&#x52A8;&#x82CF;&#x9192;&#x3002;</li>
</ul>
<h3 id="synchronzed"><a name="synchronzed" class="anchor-navigation-ex-anchor" href="#synchronzed"><i class="fa fa-link" aria-hidden="true"></i></a><a name="synchronzed" class="plugin-anchor" href="#synchronzed"><i class="fa fa-link" aria-hidden="true"></i></a>Synchronzed</h3>
<h4 id="&#x4F7F;&#x7528;&#x65B9;&#x5F0F;"><a name="&#x4F7F;&#x7528;&#x65B9;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#&#x4F7F;&#x7528;&#x65B9;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4F7F;&#x7528;&#x65B9;&#x5F0F;" class="plugin-anchor" href="#&#x4F7F;&#x7528;&#x65B9;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4F7F;&#x7528;&#x65B9;&#x5F0F;</h4>
<ul>
<li><strong>&#x4FEE;&#x9970;&#x5B9E;&#x4F8B;&#x65B9;&#x6CD5;&#xFF0C;&#x4F5C;&#x7528;&#x4E8E;&#x5F53;&#x524D;&#x5BF9;&#x8C61;&#x5B9E;&#x4F8B;&#x52A0;&#x9501;&#xFF0C;&#x8FDB;&#x5165;&#x540C;&#x6B65;&#x4EE3;&#x7801;&#x524D;&#x8981;&#x83B7;&#x5F97;&#x5F53;&#x524D;&#x5BF9;&#x8C61;&#x5B9E;&#x4F8B;&#x7684;&#x9501;</strong></li>
<li><strong>&#x4FEE;&#x9970;&#x9759;&#x6001;&#x65B9;&#x6CD5;&#xFF0C;&#x4F5C;&#x7528;&#x4E8E;&#x5F53;&#x524D;&#x7C7B;&#x5BF9;&#x8C61;&#x52A0;&#x9501;&#xFF0C;&#x8FDB;&#x5165;&#x540C;&#x6B65;&#x4EE3;&#x7801;&#x524D;&#x8981;&#x83B7;&#x5F97;&#x5F53;&#x524D;&#x7C7B;&#x5BF9;&#x8C61;&#x7684;&#x9501;</strong> &#x3002;</li>
<li><strong>&#x4FEE;&#x9970;&#x4EE3;&#x7801;&#x5757;&#xFF0C;&#x6307;&#x5B9A;&#x52A0;&#x9501;&#x5BF9;&#x8C61;&#xFF0C;&#x5BF9;&#x7ED9;&#x5B9A;&#x5BF9;&#x8C61;&#x52A0;&#x9501;&#xFF0C;&#x8FDB;&#x5165;&#x540C;&#x6B65;&#x4EE3;&#x7801;&#x5E93;&#x524D;&#x8981;&#x83B7;&#x5F97;&#x7ED9;&#x5B9A;&#x5BF9;&#x8C61;&#x7684;&#x9501;&#x3002;</strong></li>
</ul>
<h4 id="&#x5355;&#x4F8B;"><a name="&#x5355;&#x4F8B;" class="anchor-navigation-ex-anchor" href="#&#x5355;&#x4F8B;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5355;&#x4F8B;" class="plugin-anchor" href="#&#x5355;&#x4F8B;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5355;&#x4F8B;</h4>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Singleton</span> </span>{

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">volatile</span> <span class="hljs-keyword">static</span> Singleton uniqueInstance; <span class="hljs-comment">// &#x7B2C;&#x4E00;&#x6B65;</span>

    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-title">Singleton</span><span class="hljs-params">()</span> </span>{ <span class="hljs-comment">// &#x7B2C;&#x4E8C;&#x6B65;&#xFF0C;&#x79C1;&#x6709;</span>
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Singleton <span class="hljs-title">getUniqueInstance</span><span class="hljs-params">()</span> </span>{
       <span class="hljs-comment">//&#x5148;&#x5224;&#x65AD;&#x5BF9;&#x8C61;&#x662F;&#x5426;&#x5DF2;&#x7ECF;&#x5B9E;&#x4F8B;&#x8FC7;&#xFF0C;&#x6CA1;&#x6709;&#x5B9E;&#x4F8B;&#x5316;&#x8FC7;&#x624D;&#x8FDB;&#x5165;&#x52A0;&#x9501;&#x4EE3;&#x7801;</span>
        <span class="hljs-keyword">if</span> (uniqueInstance == <span class="hljs-keyword">null</span>) { <span class="hljs-comment">// &#x53CC;&#x91CD;&#x6821;&#x9A8C;</span>
            <span class="hljs-comment">//&#x7C7B;&#x5BF9;&#x8C61;&#x52A0;&#x9501;</span>
            <span class="hljs-keyword">synchronized</span> (Singleton.class) {
                <span class="hljs-keyword">if</span> (uniqueInstance == <span class="hljs-keyword">null</span>) {
                    uniqueInstance = <span class="hljs-keyword">new</span> Singleton();
                }
            }
        }
        <span class="hljs-keyword">return</span> uniqueInstance;
    }
}
</code></pre>
<p>&#x6CE8;&#x610F;&#xFF1A;<strong>uniqueInstance &#x91C7;&#x7528; volatile &#x5173;&#x952E;&#x5B57;&#x4FEE;&#x9970;&#x4E5F;&#x662F;&#x5F88;&#x6709;&#x5FC5;&#x8981;</strong></p>
<p>uniqueInstance = new Singleton(); &#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x5176;&#x5B9E;&#x662F;&#x5206;&#x4E3A;&#x4E09;&#x6B65;&#x6267;&#x884C;&#xFF1A;</p>
<ol>
<li>&#x4E3A; uniqueInstance &#x5206;&#x914D;&#x5185;&#x5B58;&#x7A7A;&#x95F4;</li>
<li>&#x521D;&#x59CB;&#x5316; uniqueInstance</li>
<li>&#x5C06; uniqueInstance &#x6307;&#x5411;&#x5206;&#x914D;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;</li>
</ol>
<p>&#x4F46;&#x662F;&#x7531;&#x4E8E; JVM &#x5177;&#x6709;&#x6307;&#x4EE4;&#x91CD;&#x6392;&#x7684;&#x7279;&#x6027;&#xFF0C;&#x6267;&#x884C;&#x987A;&#x5E8F;&#x6709;&#x53EF;&#x80FD;&#x53D8;&#x6210; 1-&gt;3-&gt;2&#x3002;&#x6307;&#x4EE4;&#x91CD;&#x6392;&#x5728;&#x5355;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E0B;&#x4E0D;&#x4F1A;&#x51FA;&#x73B0;&#x95EE;&#x9898;&#xFF0C;&#x4F46;&#x662F;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E0B;&#x4F1A;&#x5BFC;&#x81F4;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x83B7;&#x5F97;&#x8FD8;&#x6CA1;&#x6709;&#x521D;&#x59CB;&#x5316;&#x7684;&#x5B9E;&#x4F8B;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x7EBF;&#x7A0B; T1 &#x6267;&#x884C;&#x4E86; 1 &#x548C; 3&#xFF0C;&#x6B64;&#x65F6; T2 &#x8C03;&#x7528; getUniqueInstance() &#x540E;&#x53D1;&#x73B0; uniqueInstance &#x4E0D;&#x4E3A;&#x7A7A;&#xFF0C;&#x56E0;&#x6B64;&#x8FD4;&#x56DE; uniqueInstance&#xFF0C;&#x4F46;&#x6B64;&#x65F6; uniqueInstance &#x8FD8;&#x672A;&#x88AB;&#x521D;&#x59CB;&#x5316;&#x3002;</p>
<p>&#x6240;&#x4EE5;&#x91C7;&#x7528;volatile&#x4EE5;&#x4FDD;&#x8BC1;&#x7A0B;&#x5E8F;&#x7684;&#x53EF;&#x89C1;&#x6027;&#x548C;&#x6709;&#x5E8F;&#x6027;</p>
<h4 id="synchronized-&#x548C;-reentrantlock-&#x7684;&#x5BF9;&#x6BD4;"><a name="synchronized-&#x548C;-reentrantlock-&#x7684;&#x5BF9;&#x6BD4;" class="anchor-navigation-ex-anchor" href="#synchronized-&#x548C;-reentrantlock-&#x7684;&#x5BF9;&#x6BD4;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="synchronized-&#x548C;-reentrantlock-&#x7684;&#x5BF9;&#x6BD4;" class="plugin-anchor" href="#synchronized-&#x548C;-reentrantlock-&#x7684;&#x5BF9;&#x6BD4;"><i class="fa fa-link" aria-hidden="true"></i></a>Synchronized &#x548C; ReenTrantLock &#x7684;&#x5BF9;&#x6BD4;</h4>
<ol>
<li><strong>&#x4E24;&#x8005;&#x90FD;&#x662F;&#x53EF;&#x91CD;&#x5165;&#x9501;</strong>:&#x4E24;&#x8005;&#x90FD;&#x662F;&#x53EF;&#x91CD;&#x5165;&#x9501;&#x3002;&#x201C;&#x53EF;&#x91CD;&#x5165;&#x9501;&#x201D;&#x6982;&#x5FF5;&#x662F;&#xFF1A;&#x81EA;&#x5DF1;&#x53EF;&#x4EE5;&#x518D;&#x6B21;&#x83B7;&#x53D6;&#x81EA;&#x5DF1;&#x7684;&#x5185;&#x90E8;&#x9501;&#x3002;&#x6BD4;&#x5982;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x83B7;&#x5F97;&#x4E86;&#x67D0;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x9501;&#xFF0C;&#x6B64;&#x65F6;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x9501;&#x8FD8;&#x6CA1;&#x6709;&#x91CA;&#x653E;&#xFF0C;&#x5F53;&#x5176;&#x518D;&#x6B21;&#x60F3;&#x8981;&#x83B7;&#x53D6;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x9501;&#x7684;&#x65F6;&#x5019;&#x8FD8;&#x662F;&#x53EF;&#x4EE5;&#x83B7;&#x53D6;&#x7684;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x53EF;&#x9501;&#x91CD;&#x5165;&#x7684;&#x8BDD;&#xFF0C;&#x5C31;&#x4F1A;&#x9020;&#x6210;&#x6B7B;&#x9501;&#x3002;&#x540C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6BCF;&#x6B21;&#x83B7;&#x53D6;&#x9501;&#xFF0C;&#x9501;&#x7684;&#x8BA1;&#x6570;&#x5668;&#x90FD;&#x81EA;&#x589E;1&#xFF0C;&#x6240;&#x4EE5;&#x8981;&#x7B49;&#x5230;&#x9501;&#x7684;&#x8BA1;&#x6570;&#x5668;&#x4E0B;&#x964D;&#x4E3A;0&#x65F6;&#x624D;&#x80FD;&#x91CA;&#x653E;&#x9501;&#x3002;</li>
<li><strong>Synchronized &#x4F9D;&#x8D56;&#x4E8E; JVM &#x800C; ReenTrantLock &#x4F9D;&#x8D56;&#x4E8E; API</strong>:synchronized &#x662F;&#x4F9D;&#x8D56;&#x4E8E; JVM &#x5B9E;&#x73B0;&#x7684;&#xFF0C;&#x524D;&#x9762;&#x6211;&#x4EEC;&#x4E5F;&#x8BB2;&#x5230;&#x4E86; &#x865A;&#x62DF;&#x673A;&#x56E2;&#x961F;&#x5728; JDK1.6 &#x4E3A; synchronized &#x5173;&#x952E;&#x5B57;&#x8FDB;&#x884C;&#x4E86;&#x5F88;&#x591A;&#x4F18;&#x5316;&#xFF0C;&#x4F46;&#x662F;&#x8FD9;&#x4E9B;&#x4F18;&#x5316;&#x90FD;&#x662F;&#x5728;&#x865A;&#x62DF;&#x673A;&#x5C42;&#x9762;&#x5B9E;&#x73B0;&#x7684;&#xFF0C;&#x5E76;&#x6CA1;&#x6709;&#x76F4;&#x63A5;&#x66B4;&#x9732;&#x7ED9;&#x6211;&#x4EEC;&#x3002;ReenTrantLock &#x662F; JDK &#x5C42;&#x9762;&#x5B9E;&#x73B0;&#x7684;&#xFF08;&#x4E5F;&#x5C31;&#x662F; API &#x5C42;&#x9762;&#xFF0C;&#x9700;&#x8981; lock() &#x548C; unlock &#x65B9;&#x6CD5;&#x914D;&#x5408; try/finally &#x8BED;&#x53E5;&#x5757;&#x6765;&#x5B8C;&#x6210;&#xFF09;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x67E5;&#x770B;&#x5B83;&#x7684;&#x6E90;&#x4EE3;&#x7801;&#xFF0C;&#x6765;&#x770B;&#x5B83;&#x662F;&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#x7684;&#x3002;</li>
<li>ReenTrantLock &#x6BD4; Synchronized &#x589E;&#x52A0;&#x4E86;&#x4E00;&#x4E9B;&#x9AD8;&#x7EA7;&#x529F;&#x80FD;<ol>
<li><strong>&#x7B49;&#x5F85;&#x53EF;&#x4E2D;&#x65AD;</strong>&#xFF1A;&#x8FC7;lock.lockInterruptibly()&#x6765;&#x5B9E;&#x73B0;&#x8FD9;&#x4E2A;&#x673A;&#x5236;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x6B63;&#x5728;&#x7B49;&#x5F85;&#x7684;&#x7EBF;&#x7A0B;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x653E;&#x5F03;&#x7B49;&#x5F85;&#xFF0C;&#x6539;&#x4E3A;&#x5904;&#x7406;&#x5176;&#x4ED6;&#x4E8B;&#x60C5;&#x3002;</li>
<li><strong>&#x53EF;&#x5B9E;&#x73B0;&#x516C;&#x5E73;&#x9501;</strong></li>
<li><strong>&#x53EF;&#x5B9E;&#x73B0;&#x9009;&#x62E9;&#x6027;&#x901A;&#x77E5;&#xFF08;&#x9501;&#x53EF;&#x4EE5;&#x7ED1;&#x5B9A;&#x591A;&#x4E2A;&#x6761;&#x4EF6;&#xFF09;</strong>&#xFF1A;&#x7EBF;&#x7A0B;&#x5BF9;&#x8C61;&#x53EF;&#x4EE5;&#x6CE8;&#x518C;&#x5728;&#x6307;&#x5B9A;&#x7684;Condition&#x4E2D;&#xFF0C;&#x4ECE;&#x800C;&#x53EF;&#x4EE5;&#x6709;&#x9009;&#x62E9;&#x6027;&#x7684;&#x8FDB;&#x884C;&#x7EBF;&#x7A0B;&#x901A;&#x77E5;&#xFF0C;&#x5728;&#x8C03;&#x5EA6;&#x7EBF;&#x7A0B;&#x4E0A;&#x66F4;&#x52A0;&#x7075;&#x6D3B;&#x3002; &#x5728;&#x4F7F;&#x7528;notify/notifyAll()&#x65B9;&#x6CD5;&#x8FDB;&#x884C;&#x901A;&#x77E5;&#x65F6;&#xFF0C;&#x88AB;&#x901A;&#x77E5;&#x7684;&#x7EBF;&#x7A0B;&#x662F;&#x7531; JVM &#x9009;&#x62E9;&#x7684;&#xFF0C;&#x7528;ReentrantLock&#x7C7B;&#x7ED3;&#x5408;Condition&#x5B9E;&#x4F8B;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x201C;&#x9009;&#x62E9;&#x6027;&#x901A;&#x77E5;&#x201D;</li>
<li><strong>&#x6027;&#x80FD;&#x5DF2;&#x4E0D;&#x662F;&#x9009;&#x62E9;&#x6807;&#x51C6;</strong>&#xFF1A;&#x5728;jdk1.6&#x4E4B;&#x524D;synchronized &#x5173;&#x952E;&#x5B57;&#x541E;&#x5410;&#x91CF;&#x968F;&#x7EBF;&#x7A0B;&#x6570;&#x7684;&#x589E;&#x52A0;&#xFF0C;&#x4E0B;&#x964D;&#x5F97;&#x975E;&#x5E38;&#x4E25;&#x91CD;&#x3002;1.6&#x4E4B;&#x540E;&#xFF0C;<strong>synchronized &#x548C; ReenTrantLock &#x7684;&#x6027;&#x80FD;&#x57FA;&#x672C;&#x662F;&#x6301;&#x5E73;&#x4E86;&#x3002;</strong></li>
</ol>
</li>
</ol>
<h4 id="&#x5E95;&#x5C42;&#x539F;&#x7406;"><a name="&#x5E95;&#x5C42;&#x539F;&#x7406;" class="anchor-navigation-ex-anchor" href="#&#x5E95;&#x5C42;&#x539F;&#x7406;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5E95;&#x5C42;&#x539F;&#x7406;" class="plugin-anchor" href="#&#x5E95;&#x5C42;&#x539F;&#x7406;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5E95;&#x5C42;&#x539F;&#x7406;</h4>
<p><strong>synchronized &#x5173;&#x952E;&#x5B57;&#x5E95;&#x5C42;&#x539F;&#x7406;&#x5C5E;&#x4E8E; JVM &#x5C42;&#x9762;&#x3002;</strong></p>
<ol>
<li><p><strong>synchronized &#x540C;&#x6B65;&#x8BED;&#x53E5;&#x5757;&#x7684;&#x60C5;&#x51B5;</strong></p>
<p><strong>synchronized &#x540C;&#x6B65;&#x8BED;&#x53E5;&#x5757;&#x7684;&#x5B9E;&#x73B0;&#x4F7F;&#x7528;&#x7684;&#x662F; monitorenter &#x548C; monitorexit &#x6307;&#x4EE4;&#xFF0C;&#x5176;&#x4E2D; monitorenter &#x6307;&#x4EE4;&#x6307;&#x5411;&#x540C;&#x6B65;&#x4EE3;&#x7801;&#x5757;&#x7684;&#x5F00;&#x59CB;&#x4F4D;&#x7F6E;&#xFF0C;monitorexit &#x6307;&#x4EE4;&#x5219;&#x6307;&#x660E;&#x540C;&#x6B65;&#x4EE3;&#x7801;&#x5757;&#x7684;&#x7ED3;&#x675F;&#x4F4D;&#x7F6E;&#x3002;</strong> &#x5F53;&#x6267;&#x884C; monitorenter &#x6307;&#x4EE4;&#x65F6;&#xFF0C;&#x7EBF;&#x7A0B;&#x8BD5;&#x56FE;&#x83B7;&#x53D6;&#x9501;&#x4E5F;&#x5C31;&#x662F;&#x83B7;&#x53D6; monitor(monitor&#x5BF9;&#x8C61;&#x5B58;&#x5728;&#x4E8E;&#x6BCF;&#x4E2A;Java&#x5BF9;&#x8C61;&#x7684;&#x5BF9;&#x8C61;&#x5934;&#x4E2D;&#xFF0C;synchronized &#x9501;&#x4FBF;&#x662F;&#x901A;&#x8FC7;&#x8FD9;&#x79CD;&#x65B9;&#x5F0F;&#x83B7;&#x53D6;&#x9501;&#x7684;&#xFF0C;&#x4E5F;&#x662F;&#x4E3A;&#x4EC0;&#x4E48;Java&#x4E2D;&#x4EFB;&#x610F;&#x5BF9;&#x8C61;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x9501;&#x7684;&#x539F;&#x56E0;) &#x7684;&#x6301;&#x6709;&#x6743;.&#x5F53;&#x8BA1;&#x6570;&#x5668;&#x4E3A;0&#x5219;&#x53EF;&#x4EE5;&#x6210;&#x529F;&#x83B7;&#x53D6;&#xFF0C;&#x83B7;&#x53D6;&#x540E;&#x5C06;&#x9501;&#x8BA1;&#x6570;&#x5668;&#x8BBE;&#x4E3A;1&#x4E5F;&#x5C31;&#x662F;&#x52A0;1&#x3002;&#x76F8;&#x5E94;&#x7684;&#x5728;&#x6267;&#x884C; monitorexit &#x6307;&#x4EE4;&#x540E;&#xFF0C;&#x5C06;&#x9501;&#x8BA1;&#x6570;&#x5668;&#x8BBE;&#x4E3A;0&#xFF0C;&#x8868;&#x660E;&#x9501;&#x88AB;&#x91CA;&#x653E;&#x3002;&#x5982;&#x679C;&#x83B7;&#x53D6;&#x5BF9;&#x8C61;&#x9501;&#x5931;&#x8D25;&#xFF0C;&#x90A3;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x5C31;&#x8981;&#x963B;&#x585E;&#x7B49;&#x5F85;&#xFF0C;&#x76F4;&#x5230;&#x9501;&#x88AB;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x91CA;&#x653E;&#x4E3A;&#x6B62;&#x3002;</p>
</li>
<li><p><strong>synchronized &#x4FEE;&#x9970;&#x65B9;&#x6CD5;&#x7684;&#x7684;&#x60C5;&#x51B5;</strong></p>
<p>synchronized &#x4FEE;&#x9970;&#x7684;&#x65B9;&#x6CD5;&#x5E76;&#x6CA1;&#x6709; monitorenter &#x6307;&#x4EE4;&#x548C; monitorexit &#x6307;&#x4EE4;&#xFF0C;&#x53D6;&#x5F97;&#x4EE3;&#x4E4B;&#x7684;&#x786E;&#x5B9E;&#x662F; ACC_SYNCHRONIZED &#x6807;&#x8BC6;&#xFF0C;&#x8BE5;&#x6807;&#x8BC6;&#x6307;&#x660E;&#x4E86;&#x8BE5;&#x65B9;&#x6CD5;&#x662F;&#x4E00;&#x4E2A;&#x540C;&#x6B65;&#x65B9;&#x6CD5;&#xFF0C;JVM &#x901A;&#x8FC7;&#x8BE5; ACC_SYNCHRONIZED &#x8BBF;&#x95EE;&#x6807;&#x5FD7;&#x6765;&#x8FA8;&#x522B;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x662F;&#x5426;&#x58F0;&#x660E;&#x4E3A;&#x540C;&#x6B65;&#x65B9;&#x6CD5;&#xFF0C;&#x4ECE;&#x800C;&#x6267;&#x884C;&#x76F8;&#x5E94;&#x7684;&#x540C;&#x6B65;&#x8C03;&#x7528;&#x3002;</p>
</li>
</ol>
<h4 id="16&#x7248;&#x672C;&#x7684;&#x4F18;&#x5316;"><a name="16&#x7248;&#x672C;&#x7684;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#16&#x7248;&#x672C;&#x7684;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="16&#x7248;&#x672C;&#x7684;&#x4F18;&#x5316;" class="plugin-anchor" href="#16&#x7248;&#x672C;&#x7684;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>1.6&#x7248;&#x672C;&#x7684;&#x4F18;&#x5316;</h4>
<p>&#x5728; Java &#x65E9;&#x671F;&#x7248;&#x672C;&#x4E2D;&#xFF0C;synchronized &#x5C5E;&#x4E8E;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;&#x6548;&#x7387;&#x4F4E;&#x4E0B;&#xFF0C;&#x56E0;&#x4E3A;&#x76D1;&#x89C6;&#x5668;&#x9501;&#xFF08;monitor&#xFF09;&#x662F;&#x4F9D;&#x8D56;&#x4E8E;&#x5E95;&#x5C42;&#x7684;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684; <strong>Mutex Lock</strong> &#x6765;&#x5B9E;&#x73B0;&#x7684;&#xFF0C;Java &#x7684;&#x7EBF;&#x7A0B;&#x662F;&#x6620;&#x5C04;&#x5230;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x539F;&#x751F;&#x7EBF;&#x7A0B;&#x4E4B;&#x4E0A;&#x7684;&#x3002;&#x5982;&#x679C;&#x8981;&#x6302;&#x8D77;&#x6216;&#x8005;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x90FD;&#x9700;&#x8981;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5E2E;&#x5FD9;&#x5B8C;&#x6210;&#xFF0C;&#x800C;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5B9E;&#x73B0;&#x7EBF;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x5207;&#x6362;&#x65F6;&#x9700;&#x8981;&#x4ECE;&#x7528;&#x6237;&#x6001;&#x8F6C;&#x6362;&#x5230;&#x5185;&#x6838;&#x6001;&#xFF0C;&#x8FD9;&#x4E2A;&#x72B6;&#x6001;&#x4E4B;&#x95F4;&#x7684;&#x8F6C;&#x6362;&#x9700;&#x8981;&#x76F8;&#x5BF9;&#x6BD4;&#x8F83;&#x957F;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x65F6;&#x95F4;&#x6210;&#x672C;&#x76F8;&#x5BF9;&#x8F83;&#x9AD8;&#xFF0C;&#x8FD9;&#x4E5F;&#x662F;&#x4E3A;&#x4EC0;&#x4E48;&#x65E9;&#x671F;&#x7684; synchronized &#x6548;&#x7387;&#x4F4E;&#x7684;&#x539F;&#x56E0;&#x3002;&#x5E86;&#x5E78;&#x7684;&#x662F;&#x5728; Java 6 &#x4E4B;&#x540E; Java &#x5B98;&#x65B9;&#x5BF9;&#x4ECE; JVM &#x5C42;&#x9762;&#x5BF9;synchronized &#x8F83;&#x5927;&#x4F18;&#x5316;&#xFF0C;&#x6240;&#x4EE5;&#x73B0;&#x5728;&#x7684; synchronized &#x9501;&#x6548;&#x7387;&#x4E5F;&#x4F18;&#x5316;&#x5F97;&#x5F88;&#x4E0D;&#x9519;&#x4E86;&#x3002;JDK1.6&#x5BF9;&#x9501;&#x7684;&#x5B9E;&#x73B0;&#x5F15;&#x5165;&#x4E86;&#x5927;&#x91CF;&#x7684;&#x4F18;&#x5316;&#xFF0C;&#x5982;&#x81EA;&#x65CB;&#x9501;&#x3001;&#x9002;&#x5E94;&#x6027;&#x81EA;&#x65CB;&#x9501;&#x3001;&#x9501;&#x6D88;&#x9664;&#x3001;&#x9501;&#x7C97;&#x5316;&#x3001;&#x504F;&#x5411;&#x9501;&#x3001;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x7B49;&#x6280;&#x672F;&#x6765;&#x51CF;&#x5C11;&#x9501;&#x64CD;&#x4F5C;&#x7684;&#x5F00;&#x9500;&#x3002;</p>
<p>&#x9501;&#x4E3B;&#x8981;&#x5B58;&#x5728;&#x56DB;&#x4E2D;&#x72B6;&#x6001;&#xFF0C;&#x4F9D;&#x6B21;&#x662F;&#xFF1A;<strong>&#x65E0;&#x9501;&#x72B6;&#x6001;&#x3001;&#x504F;&#x5411;&#x9501;&#x72B6;&#x6001;&#x3001;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x72B6;&#x6001;&#x3001;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x72B6;&#x6001;</strong>&#xFF0C;&#x4ED6;&#x4EEC;&#x4F1A;&#x968F;&#x7740;&#x7ADE;&#x4E89;&#x7684;&#x6FC0;&#x70C8;&#x800C;&#x9010;&#x6E10;&#x5347;&#x7EA7;&#x3002;&#x6CE8;&#x610F;&#x9501;&#x53EF;&#x4EE5;&#x5347;&#x7EA7;&#x4E0D;&#x53EF;&#x964D;&#x7EA7;&#xFF0C;&#x8FD9;&#x79CD;&#x7B56;&#x7565;&#x662F;&#x4E3A;&#x4E86;&#x63D0;&#x9AD8;&#x83B7;&#x5F97;&#x9501;&#x548C;&#x91CA;&#x653E;&#x9501;&#x7684;&#x6548;&#x7387;&#x3002;</p>
<ol>
<li><p><strong>&#x504F;&#x5411;&#x9501;</strong></p>
<p><strong>&#x5F15;&#x5165;&#x504F;&#x5411;&#x9501;&#x7684;&#x76EE;&#x7684;&#x548C;&#x5F15;&#x5165;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x7684;&#x76EE;&#x7684;&#x5F88;&#x50CF;&#xFF0C;&#x4ED6;&#x4EEC;&#x90FD;&#x662F;&#x4E3A;&#x4E86;&#x6CA1;&#x6709;&#x591A;&#x7EBF;&#x7A0B;&#x7ADE;&#x4E89;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#xFF0C;&#x51CF;&#x5C11;&#x4F20;&#x7EDF;&#x7684;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x4F7F;&#x7528;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E92;&#x65A5;&#x91CF;&#x4EA7;&#x751F;&#x7684;&#x6027;&#x80FD;&#x6D88;&#x8017;&#x3002;&#x4F46;&#x662F;&#x4E0D;&#x540C;&#x662F;&#xFF1A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x5728;&#x65E0;&#x7ADE;&#x4E89;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x4F7F;&#x7528; CAS &#x64CD;&#x4F5C;&#x53BB;&#x4EE3;&#x66FF;&#x4F7F;&#x7528;&#x4E92;&#x65A5;&#x91CF;&#x3002;&#x800C;&#x504F;&#x5411;&#x9501;&#x5728;&#x65E0;&#x7ADE;&#x4E89;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x4F1A;&#x628A;&#x6574;&#x4E2A;&#x540C;&#x6B65;&#x90FD;&#x6D88;&#x9664;&#x6389;</strong>&#x3002;</p>
<p>&#x504F;&#x5411;&#x9501;&#x7684;&#x201C;&#x504F;&#x201D;&#x5C31;&#x662F;&#x504F;&#x5FC3;&#x7684;&#x504F;&#xFF0C;&#x5B83;&#x7684;&#x610F;&#x601D;&#x662F;&#x4F1A;&#x504F;&#x5411;&#x4E8E;&#x7B2C;&#x4E00;&#x4E2A;&#x83B7;&#x5F97;&#x5B83;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x5982;&#x679C;&#x5728;&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x6267;&#x884C;&#x4E2D;&#xFF0C;&#x8BE5;&#x9501;&#x6CA1;&#x6709;&#x88AB;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x83B7;&#x53D6;&#xFF0C;&#x90A3;&#x4E48;&#x6301;&#x6709;&#x504F;&#x5411;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x5C31;&#x4E0D;&#x9700;&#x8981;&#x8FDB;&#x884C;&#x540C;&#x6B65;&#xFF01;</p>
<p>&#x4F46;&#x662F;&#x5BF9;&#x4E8E;&#x9501;&#x7ADE;&#x4E89;&#x6BD4;&#x8F83;&#x6FC0;&#x70C8;&#x7684;&#x573A;&#x5408;&#xFF0C;&#x504F;&#x5411;&#x9501;&#x5C31;&#x5931;&#x6548;&#x4E86;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x6837;&#x573A;&#x5408;&#x6781;&#x6709;&#x53EF;&#x80FD;&#x6BCF;&#x6B21;&#x7533;&#x8BF7;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x90FD;&#x662F;&#x4E0D;&#x76F8;&#x540C;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x8FD9;&#x79CD;&#x573A;&#x5408;&#x4E0B;&#x4E0D;&#x5E94;&#x8BE5;&#x4F7F;&#x7528;&#x504F;&#x5411;&#x9501;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x5F97;&#x4E0D;&#x507F;&#x5931;&#xFF0C;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x504F;&#x5411;&#x9501;&#x5931;&#x8D25;&#x540E;&#xFF0C;&#x5E76;&#x4E0D;&#x4F1A;&#x7ACB;&#x5373;&#x81A8;&#x80C0;&#x4E3A;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;&#x800C;&#x662F;&#x5148;&#x5347;&#x7EA7;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x3002;</p>
<p>&#x5347;&#x7EA7;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<ol>
<li>&#x8BBF;&#x95EE;Mark Word&#x4E2D;&#x504F;&#x5411;&#x9501;&#x7684;&#x6807;&#x8BC6;&#x662F;&#x5426;&#x8BBE;&#x7F6E;&#x6210;1&#xFF0C;&#x9501;&#x6807;&#x8BC6;&#x4F4D;&#x662F;&#x5426;&#x4E3A;01&#xFF0C;&#x786E;&#x8BA4;&#x504F;&#x5411;&#x72B6;&#x6001;</li>
<li>&#x5982;&#x679C;&#x4E3A;&#x53EF;&#x504F;&#x5411;&#x72B6;&#x6001;&#xFF0C;&#x5219;&#x5224;&#x65AD;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;ID&#x662F;&#x5426;&#x4E3A;&#x504F;&#x5411;&#x7EBF;&#x7A0B;</li>
<li>&#x5982;&#x679C;&#x504F;&#x5411;&#x7EBF;&#x7A0B;&#x672A;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#xFF0C;&#x5219;&#x901A;&#x8FC7;cas&#x64CD;&#x4F5C;&#x7ADE;&#x4E89;&#x9501;&#xFF0C;&#x5982;&#x679C;&#x7ADE;&#x4E89;&#x6210;&#x529F;&#x5219;&#x64CD;&#x4F5C;Mark Word&#x4E2D;&#x7EBF;&#x7A0B;ID&#x8BBE;&#x7F6E;&#x4E3A;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;ID</li>
<li>&#x5982;&#x679C;cas&#x504F;&#x5411;&#x9501;&#x83B7;&#x53D6;&#x5931;&#x8D25;&#xFF0C;&#x5219;&#x6302;&#x8D77;&#x5F53;&#x524D;&#x504F;&#x5411;&#x9501;&#x7EBF;&#x7A0B;&#xFF0C;&#x504F;&#x5411;&#x9501;&#x5347;&#x7EA7;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x3002;</li>
</ol>
</li>
<li><p><strong>&#x8F7B;&#x91CF;&#x7EA7;&#x9501;</strong></p>
<p>&#x5018;&#x82E5;&#x504F;&#x5411;&#x9501;&#x5931;&#x8D25;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x5E76;&#x4E0D;&#x4F1A;&#x7ACB;&#x5373;&#x5347;&#x7EA7;&#x4E3A;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;&#x5B83;&#x8FD8;&#x4F1A;&#x5C1D;&#x8BD5;&#x4F7F;&#x7528;&#x4E00;&#x79CD;&#x79F0;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x7684;&#x4F18;&#x5316;&#x624B;&#x6BB5;(1.6&#x4E4B;&#x540E;&#x52A0;&#x5165;&#x7684;)&#x3002;<strong>&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x4E0D;&#x662F;&#x4E3A;&#x4E86;&#x4EE3;&#x66FF;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;&#x5B83;&#x7684;&#x672C;&#x610F;&#x662F;&#x5728;&#x6CA1;&#x6709;&#x591A;&#x7EBF;&#x7A0B;&#x7ADE;&#x4E89;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#xFF0C;&#x51CF;&#x5C11;&#x4F20;&#x7EDF;&#x7684;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x4F7F;&#x7528;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E92;&#x65A5;&#x91CF;&#x4EA7;&#x751F;&#x7684;&#x6027;&#x80FD;&#x6D88;&#x8017;&#xFF0C;&#x56E0;&#x4E3A;&#x4F7F;&#x7528;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x65F6;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x7533;&#x8BF7;&#x4E92;&#x65A5;&#x91CF;&#x3002;&#x53E6;&#x5916;&#xFF0C;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x7684;&#x52A0;&#x9501;&#x548C;&#x89E3;&#x9501;&#x90FD;&#x7528;&#x5230;&#x4E86;CAS&#x64CD;&#x4F5C;&#x3002;</strong></p>
<p><strong>&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x80FD;&#x591F;&#x63D0;&#x5347;&#x7A0B;&#x5E8F;&#x540C;&#x6B65;&#x6027;&#x80FD;&#x7684;&#x4F9D;&#x636E;&#x662F;&#x201C;&#x5BF9;&#x4E8E;&#x7EDD;&#x5927;&#x90E8;&#x5206;&#x9501;&#xFF0C;&#x5728;&#x6574;&#x4E2A;&#x540C;&#x6B65;&#x5468;&#x671F;&#x5185;&#x90FD;&#x662F;&#x4E0D;&#x5B58;&#x5728;&#x7ADE;&#x4E89;&#x7684;&#x201D;&#xFF0C;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x7ECF;&#x9A8C;&#x6570;&#x636E;&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x7ADE;&#x4E89;&#xFF0C;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x4F7F;&#x7528; CAS &#x64CD;&#x4F5C;&#x907F;&#x514D;&#x4E86;&#x4F7F;&#x7528;&#x4E92;&#x65A5;&#x64CD;&#x4F5C;&#x7684;&#x5F00;&#x9500;&#x3002;&#x4F46;&#x5982;&#x679C;&#x5B58;&#x5728;&#x9501;&#x7ADE;&#x4E89;&#xFF0C;&#x9664;&#x4E86;&#x4E92;&#x65A5;&#x91CF;&#x5F00;&#x9500;&#x5916;&#xFF0C;&#x8FD8;&#x4F1A;&#x989D;&#x5916;&#x53D1;&#x751F;CAS&#x64CD;&#x4F5C;&#xFF0C;&#x56E0;&#x6B64;&#x5728;&#x6709;&#x9501;&#x7ADE;&#x4E89;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x6BD4;&#x4F20;&#x7EDF;&#x7684;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x66F4;&#x6162;&#xFF01;&#x5982;&#x679C;&#x9501;&#x7ADE;&#x4E89;&#x6FC0;&#x70C8;&#xFF0C;&#x90A3;&#x4E48;&#x8F7B;&#x91CF;&#x7EA7;&#x5C06;&#x5F88;&#x5FEB;&#x81A8;&#x80C0;&#x4E3A;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#xFF01;</strong></p>
<p>&#x5347;&#x7EA7;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<ol>
<li>&#x7EBF;&#x7A0B;&#x7531;&#x504F;&#x5411;&#x9501;&#x5347;&#x7EA7;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x65F6;&#xFF0C;&#x4F1A;&#x5148;&#x628A;&#x9501;&#x7684;&#x5BF9;&#x8C61;&#x5934;MarkWord&#x590D;&#x5236;&#x4E00;&#x4EFD;&#x5230;&#x7EBF;&#x7A0B;&#x7684;&#x6808;&#x5E27;&#x4E2D;&#xFF0C;&#x5EFA;&#x7ACB;&#x4E00;&#x4E2A;&#x540D;&#x4E3A;&#x9501;&#x8BB0;&#x5F55;&#x7A7A;&#x95F4;&#xFF08;Lock Record&#xFF09;&#xFF0C;&#x7528;&#x4E8E;&#x5B58;&#x50A8;&#x5F53;&#x524D;Mark Word&#x7684;&#x62F7;&#x8D1D;&#x3002;</li>
<li>&#x865A;&#x62DF;&#x673A;&#x4F7F;&#x7528;cas&#x64CD;&#x4F5C;&#x5C1D;&#x8BD5;&#x5C06;&#x5BF9;&#x8C61;&#x7684;Mark Word&#x6307;&#x5411;Lock Record&#x7684;&#x6307;&#x9488;&#xFF0C;&#x5E76;&#x5C06;Lock record&#x91CC;&#x7684;owner&#x6307;&#x9488;&#x6307;&#x5BF9;&#x8C61;&#x7684;Mark Word&#x3002;</li>
<li>&#x5982;&#x679C;cas&#x64CD;&#x4F5C;&#x6210;&#x529F;&#xFF0C;&#x5219;&#x8BE5;&#x7EBF;&#x7A0B;&#x62E5;&#x6709;&#x4E86;&#x5BF9;&#x8C61;&#x7684;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x3002;&#x7B2C;&#x4E8C;&#x4E2A;&#x7EBF;&#x7A0B;cas&#x81EA;&#x65CB;&#x9501;&#x7B49;&#x5F85;&#x9501;&#x7EBF;&#x7A0B;&#x91CA;&#x653E;&#x9501;&#x3002;</li>
<li>&#x5982;&#x679C;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x7ADE;&#x4E89;&#x9501;&#xFF0C;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x8981;&#x81A8;&#x80C0;&#x4E3A;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;Mark Word&#x4E2D;&#x5B58;&#x50A8;&#x7684;&#x5C31;&#x662F;&#x6307;&#x5411;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#xFF08;&#x4E92;&#x65A5;&#x91CF;&#xFF09;&#x7684;&#x6307;&#x9488;&#x3002;&#x5176;&#x4ED6;&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;&#x8FDB;&#x5165;&#x963B;&#x585E;&#x72B6;&#x6001;&#x3002;</li>
</ol>
</li>
<li><p><strong>&#x81EA;&#x65CB;&#x9501;&#x548C;&#x81EA;&#x9002;&#x5E94;&#x81EA;&#x65CB;</strong></p>
<p>&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x5931;&#x8D25;&#x540E;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x7EBF;&#x7A0B;&#x771F;&#x5B9E;&#x5730;&#x5728;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5C42;&#x9762;&#x6302;&#x8D77;&#xFF0C;&#x8FD8;&#x4F1A;&#x8FDB;&#x884C;&#x4E00;&#x9879;&#x79F0;&#x4E3A;&#x81EA;&#x65CB;&#x9501;&#x7684;&#x4F18;&#x5316;&#x624B;&#x6BB5;&#x3002;</p>
<p>&#x4E92;&#x65A5;&#x540C;&#x6B65;&#x5BF9;&#x6027;&#x80FD;&#x6700;&#x5927;&#x7684;&#x5F71;&#x54CD;&#x5C31;&#x662F;&#x963B;&#x585E;&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x56E0;&#x4E3A;&#x6302;&#x8D77;&#x7EBF;&#x7A0B;/&#x6062;&#x590D;&#x7EBF;&#x7A0B;&#x7684;&#x64CD;&#x4F5C;&#x90FD;&#x9700;&#x8981;&#x8F6C;&#x5165;&#x5185;&#x6838;&#x6001;&#x4E2D;&#x5B8C;&#x6210;&#xFF08;&#x7528;&#x6237;&#x6001;&#x8F6C;&#x6362;&#x5230;&#x5185;&#x6838;&#x6001;&#x4F1A;&#x8017;&#x8D39;&#x65F6;&#x95F4;&#xFF09;&#x3002;</p>
<p><strong>&#x4E00;&#x822C;&#x7EBF;&#x7A0B;&#x6301;&#x6709;&#x9501;&#x7684;&#x65F6;&#x95F4;&#x90FD;&#x4E0D;&#x662F;&#x592A;&#x957F;&#xFF0C;&#x6240;&#x4EE5;&#x4EC5;&#x4EC5;&#x4E3A;&#x4E86;&#x8FD9;&#x4E00;&#x70B9;&#x65F6;&#x95F4;&#x53BB;&#x6302;&#x8D77;&#x7EBF;&#x7A0B;/&#x6062;&#x590D;&#x7EBF;&#x7A0B;&#x662F;&#x5F97;&#x4E0D;&#x507F;&#x5931;&#x7684;&#x3002;</strong> &#x6240;&#x4EE5;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x7684;&#x5F00;&#x53D1;&#x56E2;&#x961F;&#x5C31;&#x8FD9;&#x6837;&#x53BB;&#x8003;&#x8651;&#xFF1A;&#x201C;&#x6211;&#x4EEC;&#x80FD;&#x4E0D;&#x80FD;&#x8BA9;&#x540E;&#x9762;&#x6765;&#x7684;&#x8BF7;&#x6C42;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x7B49;&#x5F85;&#x4E00;&#x4F1A;&#x800C;&#x4E0D;&#x88AB;&#x6302;&#x8D77;&#x5462;&#xFF1F;&#x770B;&#x770B;&#x6301;&#x6709;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x662F;&#x5426;&#x5F88;&#x5FEB;&#x5C31;&#x4F1A;&#x91CA;&#x653E;&#x9501;&#x201D;&#x3002;<strong>&#x4E3A;&#x4E86;&#x8BA9;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7B49;&#x5F85;&#xFF0C;&#x6211;&#x4EEC;&#x53EA;&#x9700;&#x8981;&#x8BA9;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x4E00;&#x4E2A;&#x5FD9;&#x5FAA;&#x73AF;&#xFF08;&#x81EA;&#x65CB;&#xFF09;&#xFF0C;&#x8FD9;&#x9879;&#x6280;&#x672F;&#x5C31;&#x53EB;&#x505A;&#x81EA;&#x65CB;</strong>&#x3002;</p>
<p><strong>&#x5728; JDK1.6 &#x4E2D;&#x5F15;&#x5165;&#x4E86;&#x81EA;&#x9002;&#x5E94;&#x7684;&#x81EA;&#x65CB;&#x9501;&#x3002;&#x81EA;&#x9002;&#x5E94;&#x7684;&#x81EA;&#x65CB;&#x9501;&#x5E26;&#x6765;&#x7684;&#x6539;&#x8FDB;&#x5C31;&#x662F;&#xFF1A;&#x81EA;&#x65CB;&#x7684;&#x65F6;&#x95F4;&#x4E0D;&#x5728;&#x56FA;&#x5B9A;&#x4E86;&#xFF0C;&#x800C;&#x662F;&#x548C;&#x524D;&#x4E00;&#x6B21;&#x540C;&#x4E00;&#x4E2A;&#x9501;&#x4E0A;&#x7684;&#x81EA;&#x65CB;&#x65F6;&#x95F4;&#x4EE5;&#x53CA;&#x9501;&#x7684;&#x62E5;&#x6709;&#x8005;&#x7684;&#x72B6;&#x6001;&#x6765;&#x51B3;&#x5B9A;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x53D8;&#x5F97;&#x8D8A;&#x6765;&#x8D8A;&#x201C;&#x806A;&#x660E;&#x201D;&#x4E86;</strong>&#x3002;</p>
</li>
<li><p><strong>&#x9501;&#x6D88;&#x9664;</strong></p>
<p>&#x9501;&#x6D88;&#x9664;&#x7406;&#x89E3;&#x8D77;&#x6765;&#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x5B83;&#x6307;&#x7684;&#x5C31;&#x662F;&#x865A;&#x62DF;&#x673A;&#x5373;&#x4F7F;&#x7F16;&#x8BD1;&#x5668;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x68C0;&#x6D4B;&#x5230;&#x90A3;&#x4E9B;&#x5171;&#x4EAB;&#x6570;&#x636E;&#x4E0D;&#x53EF;&#x80FD;&#x5B58;&#x5728;&#x7ADE;&#x4E89;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x6267;&#x884C;&#x9501;&#x6D88;&#x9664;&#x3002;&#x9501;&#x6D88;&#x9664;&#x53EF;&#x4EE5;&#x8282;&#x7701;&#x6BEB;&#x65E0;&#x610F;&#x4E49;&#x7684;&#x8BF7;&#x6C42;&#x9501;&#x7684;&#x65F6;&#x95F4;&#x3002;</p>
</li>
<li><p><strong>&#x9501;&#x7C97;&#x5316;</strong></p>
<p>&#x539F;&#x5219;&#x4E0A;&#xFF0C;&#x6211;&#x4EEC;&#x5728;&#x7F16;&#x5199;&#x4EE3;&#x7801;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x603B;&#x662F;&#x63A8;&#x8350;&#x5C06;&#x540C;&#x6B65;&#x5757;&#x7684;&#x4F5C;&#x7528;&#x8303;&#x56F4;&#x9650;&#x5236;&#x5F97;&#x5C3D;&#x91CF;&#x5C0F;&#xFF0C;&#x2014;&#x2014;&#x76F4;&#x5728;&#x5171;&#x4EAB;&#x6570;&#x636E;&#x7684;&#x5B9E;&#x9645;&#x4F5C;&#x7528;&#x57DF;&#x624D;&#x8FDB;&#x884C;&#x540C;&#x6B65;&#xFF0C;&#x8FD9;&#x6837;&#x662F;&#x4E3A;&#x4E86;&#x4F7F;&#x5F97;&#x9700;&#x8981;&#x540C;&#x6B65;&#x7684;&#x64CD;&#x4F5C;&#x6570;&#x91CF;&#x5C3D;&#x53EF;&#x80FD;&#x53D8;&#x5C0F;&#xFF0C;&#x5982;&#x679C;&#x5B58;&#x5728;&#x9501;&#x7ADE;&#x4E89;&#xFF0C;&#x90A3;&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;&#x4E5F;&#x80FD;&#x5C3D;&#x5FEB;&#x62FF;&#x5230;&#x9501;&#x3002;</p>
</li>
<li><p>&#x603B;&#x7ED3;&#x5347;&#x7EA7;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<ol>
<li>&#x68C0;&#x6D4B;Mark Word&#x91CC;&#x9762;&#x662F;&#x4E0D;&#x662F;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x7684;ID&#xFF0C;&#x5982;&#x679C;&#x662F;&#xFF0C;&#x8868;&#x793A;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x5904;&#x4E8E;&#x504F;&#x5411;&#x9501;</li>
<li>&#x5982;&#x679C;&#x4E0D;&#x662F;&#xFF0C;&#x5219;&#x4F7F;&#x7528;CAS&#x5C06;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x7684;ID&#x66FF;&#x6362;Mard Word&#xFF0C;&#x5982;&#x679C;&#x6210;&#x529F;&#x5219;&#x8868;&#x793A;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x83B7;&#x5F97;&#x504F;&#x5411;&#x9501;&#xFF0C;&#x7F6E;&#x504F;&#x5411;&#x6807;&#x5FD7;&#x4F4D;1</li>
<li>&#x5982;&#x679C;&#x5931;&#x8D25;&#xFF0C;&#x5219;&#x8BF4;&#x660E;&#x53D1;&#x751F;&#x7ADE;&#x4E89;&#xFF0C;&#x64A4;&#x9500;&#x504F;&#x5411;&#x9501;&#xFF0C;&#x8FDB;&#x800C;&#x5347;&#x7EA7;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x3002;</li>
<li>&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;CAS&#x5C06;&#x5BF9;&#x8C61;&#x5934;&#x7684;Mark Word&#x66FF;&#x6362;&#x4E3A;&#x9501;&#x8BB0;&#x5F55;&#x6307;&#x9488;&#xFF0C;&#x5982;&#x679C;&#x6210;&#x529F;&#xFF0C;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x83B7;&#x5F97;&#x9501;</li>
<li>&#x5982;&#x679C;&#x5931;&#x8D25;&#xFF0C;&#x8868;&#x793A;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x7ADE;&#x4E89;&#x9501;&#xFF0C;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x4FBF;&#x5C1D;&#x8BD5;&#x4F7F;&#x7528;&#x81EA;&#x65CB;&#x6765;&#x83B7;&#x53D6;&#x9501;&#x3002;</li>
<li>&#x5982;&#x679C;&#x81EA;&#x65CB;&#x6210;&#x529F;&#x5219;&#x4F9D;&#x7136;&#x5904;&#x4E8E;&#x8F7B;&#x91CF;&#x7EA7;&#x72B6;&#x6001;&#x3002;</li>
<li>&#x5982;&#x679C;&#x81EA;&#x65CB;&#x5931;&#x8D25;&#xFF0C;&#x5219;&#x5347;&#x7EA7;&#x4E3A;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x3002;</li>
</ol>
</li>
</ol>
<h3 id="cas"><a name="cas" class="anchor-navigation-ex-anchor" href="#cas"><i class="fa fa-link" aria-hidden="true"></i></a><a name="cas" class="plugin-anchor" href="#cas"><i class="fa fa-link" aria-hidden="true"></i></a>CAS</h3>
<p><strong>&#x6211;&#x4EEC;&#x5728;&#x8BFB;Concurrent&#x5305;&#x4E0B;&#x7684;&#x7C7B;&#x7684;&#x6E90;&#x7801;&#x65F6;&#xFF0C;&#x53D1;&#x73B0;&#x65E0;&#x8BBA;&#x662F;</strong>ReenterLock&#x5185;&#x90E8;&#x7684;AQS&#xFF0C;&#x8FD8;&#x662F;&#x5404;&#x79CD;Atomic&#x5F00;&#x5934;&#x7684;&#x539F;&#x5B50;&#x7C7B;&#xFF0C;&#x5185;&#x90E8;&#x90FD;&#x5E94;&#x7528;&#x5230;&#x4E86;<code>CAS</code></p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Test</span> </span>{

    <span class="hljs-keyword">public</span> AtomicInteger i;

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">add</span><span class="hljs-params">()</span> </span>{
        i.getAndIncrement();
    }
}
</code></pre>
<p><strong>&#x6211;&#x4EEC;&#x6765;&#x770B;<code>getAndIncrement</code>&#x7684;&#x5185;&#x90E8;&#xFF1A;</strong></p>
<pre><code class="lang-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getAndIncrement</span><span class="hljs-params">()</span> </span>{
    <span class="hljs-keyword">return</span> unsafe.getAndAddInt(<span class="hljs-keyword">this</span>, valueOffset, <span class="hljs-number">1</span>);
}
</code></pre>
<p><strong>&#x518D;&#x6DF1;&#x5165;&#x5230;<code>getAndAddInt</code>():</strong></p>
<pre><code class="lang-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getAndAddInt</span><span class="hljs-params">(Object var1, <span class="hljs-keyword">long</span> var2, <span class="hljs-keyword">int</span> var4)</span> </span>{
    <span class="hljs-keyword">int</span> var5;
    do {
        var5 = <span class="hljs-keyword">this</span>.getIntVolatile(var1, var2);
    } <span class="hljs-keyword">while</span>(!<span class="hljs-keyword">this</span>.compareAndSwapInt(var1, var2, var5, var5 + var4));

    <span class="hljs-keyword">return</span> var5;
}
</code></pre>
<p><strong>&#x73B0;&#x5728;&#x91CD;&#x70B9;&#x6765;&#x4E86;&#xFF0C;<code>compareAndSwapInt&#xFF08;var1, var2, var5, var5 + var4&#xFF09;</code>&#x5176;&#x5B9E;&#x6362;&#x6210;<code>compareAndSwapInt&#xFF08;obj, offset, expect, update&#xFF09;</code>&#x6BD4;&#x8F83;&#x6E05;&#x695A;&#xFF0C;&#x610F;&#x601D;&#x5C31;&#x662F;&#x5982;&#x679C;<code>obj</code>&#x5185;&#x7684;<code>value</code>&#x548C;<code>expect</code>&#x76F8;&#x7B49;&#xFF0C;&#x5C31;&#x8BC1;&#x660E;&#x6CA1;&#x6709;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x6539;&#x53D8;&#x8FC7;&#x8FD9;&#x4E2A;&#x53D8;&#x91CF;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x66F4;&#x65B0;&#x5B83;&#x4E3A;<code>update</code>&#xFF0C;&#x5982;&#x679C;&#x8FD9;&#x4E00;&#x6B65;&#x7684;<code>CAS</code>&#x6CA1;&#x6709;&#x6210;&#x529F;&#xFF0C;&#x90A3;&#x5C31;&#x91C7;&#x7528;&#x81EA;&#x65CB;&#x7684;&#x65B9;&#x5F0F;&#x7EE7;&#x7EED;&#x8FDB;&#x884C;<code>CAS</code>&#x64CD;&#x4F5C;&#xFF0C;&#x53D6;&#x51FA;&#x4E4D;&#x4E00;&#x770B;&#x8FD9;&#x4E5F;&#x662F;&#x4E24;&#x4E2A;&#x6B65;&#x9AA4;&#x4E86;&#x554A;&#xFF0C;&#x5176;&#x5B9E;&#x5728;<code>JNI</code>&#x91CC;&#x662F;&#x501F;&#x52A9;&#x4E8E;&#x4E00;&#x4E2A;<code>CPU</code>&#x6307;&#x4EE4;&#x5B8C;&#x6210;&#x7684;&#x3002;&#x6240;&#x4EE5;&#x8FD8;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x3002;</strong></p>
<h4 id="cas&#x5E95;&#x5C42;"><a name="cas&#x5E95;&#x5C42;" class="anchor-navigation-ex-anchor" href="#cas&#x5E95;&#x5C42;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="cas&#x5E95;&#x5C42;" class="plugin-anchor" href="#cas&#x5E95;&#x5C42;"><i class="fa fa-link" aria-hidden="true"></i></a>CAS&#x5E95;&#x5C42;</h4>
<pre><code class="lang-c">UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x))
  UnsafeWrapper(<span class="hljs-string">&quot;Unsafe_CompareAndSwapInt&quot;</span>);
  oop p = JNIHandles::resolve(obj);
  jint* addr = (jint *) index_oop_from_field_offset_long(p, offset);
  <span class="hljs-keyword">return</span> (jint)(Atomic::cmpxchg(x, addr, e)) == e;
UNSAFE_END
</code></pre>
<p><strong>p&#x662F;&#x53D6;&#x51FA;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;addr&#x662F;p&#x4E2D;offset&#x5904;&#x7684;&#x5730;&#x5740;&#xFF0C;&#x6700;&#x540E;&#x8C03;&#x7528;&#x4E86;<code>Atomic::cmpxchg(x, addr, e)</code>, &#x5176;&#x4E2D;&#x53C2;&#x6570;x&#x662F;&#x5373;&#x5C06;&#x66F4;&#x65B0;&#x7684;&#x503C;&#xFF0C;&#x53C2;&#x6570;e&#x662F;&#x539F;&#x5185;&#x5B58;&#x7684;&#x503C;&#x3002;&#x4EE3;&#x7801;&#x4E2D;&#x80FD;&#x770B;&#x5230;cmpxchg&#x6709;&#x57FA;&#x4E8E;&#x5404;&#x4E2A;&#x5E73;&#x53F0;&#x7684;&#x5B9E;&#x73B0;&#x3002;</strong></p>
<h4 id="aba&#x95EE;&#x9898;"><a name="aba&#x95EE;&#x9898;" class="anchor-navigation-ex-anchor" href="#aba&#x95EE;&#x9898;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="aba&#x95EE;&#x9898;" class="plugin-anchor" href="#aba&#x95EE;&#x9898;"><i class="fa fa-link" aria-hidden="true"></i></a>ABA&#x95EE;&#x9898;</h4>
<p>&#x63CF;&#x8FF0;: &#x7B2C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x53D6;&#x5230;&#x4E86;&#x53D8;&#x91CF; x &#x7684;&#x503C; A&#xFF0C;&#x7136;&#x540E;&#x5DF4;&#x62C9;&#x5DF4;&#x62C9;&#x5E72;&#x522B;&#x7684;&#x4E8B;&#xFF0C;&#x603B;&#x4E4B;&#x5C31;&#x662F;&#x53EA;&#x62FF;&#x5230;&#x4E86;&#x53D8;&#x91CF; x &#x7684;&#x503C; A&#x3002;&#x8FD9;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#x7B2C;&#x4E8C;&#x4E2A;&#x7EBF;&#x7A0B;&#x4E5F;&#x53D6;&#x5230;&#x4E86;&#x53D8;&#x91CF; x &#x7684;&#x503C; A&#xFF0C;&#x7136;&#x540E;&#x628A;&#x53D8;&#x91CF; x &#x7684;&#x503C;&#x6539;&#x4E3A; B&#xFF0C;&#x7136;&#x540E;&#x5DF4;&#x62C9;&#x5DF4;&#x62C9;&#x5E72;&#x522B;&#x7684;&#x4E8B;&#xFF0C;&#x6700;&#x540E;&#x53C8;&#x628A;&#x53D8;&#x91CF; x &#x7684;&#x503C;&#x53D8;&#x4E3A; A &#xFF08;&#x76F8;&#x5F53;&#x4E8E;&#x8FD8;&#x539F;&#x4E86;&#xFF09;&#x3002;&#x5728;&#x8FD9;&#x4E4B;&#x540E;&#x7B2C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7EC8;&#x4E8E;&#x8FDB;&#x884C;&#x4E86;&#x53D8;&#x91CF; x &#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x4F46;&#x662F;&#x6B64;&#x65F6;&#x53D8;&#x91CF; x &#x7684;&#x503C;&#x8FD8;&#x662F; A&#xFF0C;&#x6240;&#x4EE5; compareAndSet &#x64CD;&#x4F5C;&#x662F;&#x6210;&#x529F;&#x3002;</p>
<p><strong>&#x76EE;&#x524D;&#x5728;JDK&#x7684;atomic&#x5305;&#x91CC;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;&#x7C7B;<code>AtomicStampedReference</code>&#x6765;&#x89E3;&#x51B3;ABA&#x95EE;&#x9898;&#x3002;</strong></p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ABADemo</span> </span>{
    <span class="hljs-keyword">static</span> AtomicInteger atomicInteger = <span class="hljs-keyword">new</span> AtomicInteger(<span class="hljs-number">100</span>);
    <span class="hljs-keyword">static</span> AtomicStampedReference&lt;Integer&gt; atomicStampedReference = <span class="hljs-keyword">new</span> AtomicStampedReference&lt;&gt;(<span class="hljs-number">100</span>, <span class="hljs-number">1</span>);

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        System.out.println(<span class="hljs-string">&quot;=====ABA&#x7684;&#x95EE;&#x9898;&#x4EA7;&#x751F;=====&quot;</span>);
        <span class="hljs-keyword">new</span> Thread(() -&gt; {
            atomicInteger.compareAndSet(<span class="hljs-number">100</span>, <span class="hljs-number">101</span>);
            atomicInteger.compareAndSet(<span class="hljs-number">101</span>, <span class="hljs-number">100</span>);
        }, <span class="hljs-string">&quot;t1&quot;</span>).start();

        <span class="hljs-keyword">new</span> Thread(() -&gt; {
            <span class="hljs-comment">// &#x4FDD;&#x8BC1;&#x7EBF;&#x7A0B;1&#x5B8C;&#x6210;&#x4E00;&#x6B21;ABA&#x95EE;&#x9898;</span>
            <span class="hljs-keyword">try</span> { TimeUnit.SECONDS.sleep(<span class="hljs-number">1</span>); } <span class="hljs-keyword">catch</span> (InterruptedException e) { e.printStackTrace(); }
            System.out.println(atomicInteger.compareAndSet(<span class="hljs-number">100</span>, <span class="hljs-number">2020</span>) + <span class="hljs-string">&quot; &quot;</span> + atomicInteger.get());
        }, <span class="hljs-string">&quot;t2&quot;</span>).start();
        <span class="hljs-keyword">try</span> { TimeUnit.SECONDS.sleep(<span class="hljs-number">2</span>); } <span class="hljs-keyword">catch</span> (InterruptedException e) { e.printStackTrace(); }

        System.out.println(<span class="hljs-string">&quot;=====&#x89E3;&#x51B3;ABA&#x7684;&#x95EE;&#x9898;=====&quot;</span>);
        <span class="hljs-keyword">new</span> Thread(() -&gt; {
            <span class="hljs-keyword">int</span> stamp = atomicStampedReference.getStamp(); <span class="hljs-comment">// &#x7B2C;&#x4E00;&#x6B21;&#x83B7;&#x53D6;&#x7248;&#x672C;&#x53F7;</span>
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x7B2C;1&#x6B21;&#x7248;&#x672C;&#x53F7;&quot;</span> + stamp);
            <span class="hljs-keyword">try</span> { TimeUnit.SECONDS.sleep(<span class="hljs-number">2</span>); } <span class="hljs-keyword">catch</span> (InterruptedException e) { e.printStackTrace(); }
            atomicStampedReference.compareAndSet(<span class="hljs-number">100</span>, <span class="hljs-number">101</span>, atomicStampedReference.getStamp(), atomicStampedReference.getStamp() + <span class="hljs-number">1</span>);
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot;\t&#x7B2C;2&#x6B21;&#x7248;&#x672C;&#x53F7;&quot;</span> + atomicStampedReference.getStamp());
            atomicStampedReference.compareAndSet(<span class="hljs-number">101</span>, <span class="hljs-number">100</span>, atomicStampedReference.getStamp(), atomicStampedReference.getStamp() + <span class="hljs-number">1</span>);
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot;\t&#x7B2C;3&#x6B21;&#x7248;&#x672C;&#x53F7;&quot;</span> + atomicStampedReference.getStamp());
        }, <span class="hljs-string">&quot;t3&quot;</span>).start();

        <span class="hljs-keyword">new</span> Thread(() -&gt; {
            <span class="hljs-keyword">int</span> stamp = atomicStampedReference.getStamp();
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot;\t&#x7B2C;1&#x6B21;&#x7248;&#x672C;&#x53F7;&quot;</span> + stamp);
            <span class="hljs-keyword">try</span> { TimeUnit.SECONDS.sleep(<span class="hljs-number">4</span>); } <span class="hljs-keyword">catch</span> (InterruptedException e) { e.printStackTrace(); }
            <span class="hljs-keyword">boolean</span> result = atomicStampedReference.compareAndSet(<span class="hljs-number">100</span>, <span class="hljs-number">2020</span>, stamp, stamp + <span class="hljs-number">1</span>);
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot;\t&#x4FEE;&#x6539;&#x662F;&#x5426;&#x6210;&#x529F;&quot;</span> + result + <span class="hljs-string">&quot;\t&#x5F53;&#x524D;&#x6700;&#x65B0;&#x5B9E;&#x9645;&#x7248;&#x672C;&#x53F7;&#xFF1A;&quot;</span> + atomicStampedReference.getStamp());
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot;\t&#x5F53;&#x524D;&#x6700;&#x65B0;&#x5B9E;&#x9645;&#x503C;&#xFF1A;&quot;</span> + atomicStampedReference.getReference());
        }, <span class="hljs-string">&quot;t4&quot;</span>).start();

    }
}
</code></pre>
<h3 id="threadlocal"><a name="threadlocal" class="anchor-navigation-ex-anchor" href="#threadlocal"><i class="fa fa-link" aria-hidden="true"></i></a><a name="threadlocal" class="plugin-anchor" href="#threadlocal"><i class="fa fa-link" aria-hidden="true"></i></a>ThreadLocal</h3>
<p><strong>&#x5982;&#x679C;&#x60F3;&#x5B9E;&#x73B0;&#x6BCF;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x4E13;&#x5C5E;&#x672C;&#x5730;&#x53D8;&#x91CF;&#x8BE5;&#x5982;&#x4F55;&#x89E3;&#x51B3;&#x5462;&#xFF1F;</strong> JDK&#x4E2D;&#x63D0;&#x4F9B;&#x7684;<code>ThreadLocal</code>&#x7C7B;&#x6B63;&#x662F;&#x4E3A;&#x4E86;&#x89E3;&#x51B3;&#x8FD9;&#x6837;&#x7684;&#x95EE;&#x9898;&#x3002; <strong><code>ThreadLocal</code>&#x7C7B;&#x4E3B;&#x8981;&#x89E3;&#x51B3;&#x7684;&#x5C31;&#x662F;&#x8BA9;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x7ED1;&#x5B9A;&#x81EA;&#x5DF1;&#x7684;&#x503C;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06;<code>ThreadLocal</code>&#x7C7B;&#x5F62;&#x8C61;&#x7684;&#x6BD4;&#x55BB;&#x6210;&#x5B58;&#x653E;&#x6570;&#x636E;&#x7684;&#x76D2;&#x5B50;&#xFF0C;&#x76D2;&#x5B50;&#x4E2D;&#x53EF;&#x4EE5;&#x5B58;&#x50A8;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x79C1;&#x6709;&#x6570;&#x636E;&#x3002;**</strong>&#x5982;&#x679C;&#x4F60;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;<code>ThreadLocal</code>&#x53D8;&#x91CF;&#xFF0C;&#x90A3;&#x4E48;&#x8BBF;&#x95EE;&#x8FD9;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x90FD;&#x4F1A;&#x6709;&#x8FD9;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x672C;&#x5730;&#x526F;&#x672C;&#xFF0C;&#x8FD9;&#x4E5F;&#x662F;<code>ThreadLocal</code>&#x53D8;&#x91CF;&#x540D;&#x7684;&#x7531;&#x6765;&#x3002;&#x4ED6;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <code>get&#xFF08;&#xFF09;</code> &#x548C; <code>set&#xFF08;&#xFF09;</code> &#x65B9;&#x6CD5;&#x6765;&#x83B7;&#x53D6;&#x9ED8;&#x8BA4;&#x503C;&#x6216;&#x5C06;&#x5176;&#x503C;&#x66F4;&#x6539;&#x4E3A;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x6240;&#x5B58;&#x7684;&#x526F;&#x672C;&#x7684;&#x503C;&#xFF0C;&#x4ECE;&#x800C;&#x907F;&#x514D;&#x4E86;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x95EE;&#x9898;&#x3002;**</p>
<h4 id="&#x539F;&#x7406;"><a name="&#x539F;&#x7406;" class="anchor-navigation-ex-anchor" href="#&#x539F;&#x7406;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x539F;&#x7406;" class="plugin-anchor" href="#&#x539F;&#x7406;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x539F;&#x7406;</h4>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Thread</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Runnable</span> </span>{
 ......
<span class="hljs-comment">//&#x4E0E;&#x6B64;&#x7EBF;&#x7A0B;&#x6709;&#x5173;&#x7684;ThreadLocal&#x503C;&#x3002;&#x7531;ThreadLocal&#x7C7B;&#x7EF4;&#x62A4;</span>
ThreadLocal.ThreadLocalMap threadLocals = <span class="hljs-keyword">null</span>;

<span class="hljs-comment">//&#x4E0E;&#x6B64;&#x7EBF;&#x7A0B;&#x6709;&#x5173;&#x7684;InheritableThreadLocal&#x503C;&#x3002;&#x7531;InheritableThreadLocal&#x7C7B;&#x7EF4;&#x62A4;</span>
ThreadLocal.ThreadLocalMap inheritableThreadLocals = <span class="hljs-keyword">null</span>;
 ......
}
</code></pre>
<p>&#x4ECE;&#x4E0A;&#x9762;<code>Thread</code>&#x7C7B; &#x6E90;&#x4EE3;&#x7801;&#x53EF;&#x4EE5;&#x770B;&#x51FA;<code>Thread</code> &#x7C7B;&#x4E2D;&#x6709;&#x4E00;&#x4E2A; <code>threadLocals</code> &#x548C; &#x4E00;&#x4E2A; <code>inheritableThreadLocals</code> &#x53D8;&#x91CF;&#xFF0C;&#x5B83;&#x4EEC;&#x90FD;&#x662F; <code>ThreadLocalMap</code> &#x7C7B;&#x578B;&#x7684;&#x53D8;&#x91CF;,&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x628A; <code>ThreadLocalMap</code> &#x7406;&#x89E3;&#x4E3A;<code>ThreadLocal</code> &#x7C7B;&#x5B9E;&#x73B0;&#x7684;&#x5B9A;&#x5236;&#x5316;&#x7684; <code>HashMap</code>&#x3002;&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;&#x8FD9;&#x4E24;&#x4E2A;&#x53D8;&#x91CF;&#x90FD;&#x662F;null&#xFF0C;&#x53EA;&#x6709;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x8C03;&#x7528; <code>ThreadLocal</code> &#x7C7B;&#x7684; <code>set</code>&#x6216;<code>get</code>&#x65B9;&#x6CD5;&#x65F6;&#x624D;&#x521B;&#x5EFA;&#x5B83;&#x4EEC;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x8C03;&#x7528;&#x8FD9;&#x4E24;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x4EEC;&#x8C03;&#x7528;&#x7684;&#x662F;<code>ThreadLocalMap</code>&#x7C7B;&#x5BF9;&#x5E94;&#x7684; <code>get()</code>&#x3001;<code>set()</code>&#x65B9;&#x6CD5;&#x3002;</p>
<p><code>ThreadLocal</code>&#x7C7B;&#x7684;<code>set()</code>&#x65B9;&#x6CD5;</p>
<pre><code class="lang-java">    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">set</span><span class="hljs-params">(T value)</span> </span>{
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        <span class="hljs-keyword">if</span> (map != <span class="hljs-keyword">null</span>)
            map.set(<span class="hljs-keyword">this</span>, value);
        <span class="hljs-keyword">else</span>
            createMap(t, value);
    }
    <span class="hljs-function">ThreadLocalMap <span class="hljs-title">getMap</span><span class="hljs-params">(Thread t)</span> </span>{
        <span class="hljs-keyword">return</span> t.threadLocals;
    }
</code></pre>
<p><strong>&#x6700;&#x7EC8;&#x7684;&#x53D8;&#x91CF;&#x662F;&#x653E;&#x5728;&#x4E86;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x7684; <code>ThreadLocalMap</code> &#x4E2D;&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x5B58;&#x5728; <code>ThreadLocal</code> &#x4E0A;&#xFF0C;ThreadLocal &#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x4E3A;&#x53EA;&#x662F;ThreadLocalMap&#x7684;&#x5C01;&#x88C5;&#xFF0C;&#x4F20;&#x9012;&#x4E86;&#x53D8;&#x91CF;&#x503C;&#x3002;</strong></p>
<p><strong>&#x6BCF;&#x4E2A;Thread&#x4E2D;&#x90FD;&#x5177;&#x5907;&#x4E00;&#x4E2A;ThreadLocalMap&#xFF0C;&#x800C;ThreadLocalMap&#x53EF;&#x4EE5;&#x5B58;&#x50A8;&#x4EE5;ThreadLocal&#x4E3A;key&#x7684;&#x952E;&#x503C;&#x5BF9;&#x3002;</strong> &#x6BD4;&#x5982;&#x6211;&#x4EEC;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x4E2D;&#x58F0;&#x660E;&#x4E86;&#x4E24;&#x4E2A; <code>ThreadLocal</code> &#x5BF9;&#x8C61;&#x7684;&#x8BDD;&#xFF0C;&#x4F1A;&#x4F7F;&#x7528; <code>Thread</code>&#x5185;&#x90E8;&#x90FD;&#x662F;&#x4F7F;&#x7528;&#x4EC5;&#x6709;&#x90A3;&#x4E2A;<code>ThreadLocalMap</code> &#x5B58;&#x653E;&#x6570;&#x636E;&#x7684;&#xFF0C;<code>ThreadLocalMap</code>&#x7684; key &#x5C31;&#x662F; <code>ThreadLocal</code>&#x5BF9;&#x8C61;&#xFF0C;value &#x5C31;&#x662F; <code>ThreadLocal</code> &#x5BF9;&#x8C61;&#x8C03;&#x7528;<code>set</code>&#x65B9;&#x6CD5;&#x8BBE;&#x7F6E;&#x7684;&#x503C;&#x3002;<code>ThreadLocal</code> &#x662F; map&#x7ED3;&#x6784;&#x662F;&#x4E3A;&#x4E86;&#x8BA9;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x53EF;&#x4EE5;&#x5173;&#x8054;&#x591A;&#x4E2A; <code>ThreadLocal</code>&#x53D8;&#x91CF;&#x3002;&#x8FD9;&#x4E5F;&#x5C31;&#x89E3;&#x91CA;&#x4E86;ThreadLocal&#x58F0;&#x660E;&#x7684;&#x53D8;&#x91CF;&#x4E3A;&#x4EC0;&#x4E48;&#x5728;&#x6BCF;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x4E13;&#x5C5E;&#x672C;&#x5730;&#x53D8;&#x91CF;&#x3002;</p>
<h4 id="&#x5185;&#x5B58;&#x6CC4;&#x9732;"><a name="&#x5185;&#x5B58;&#x6CC4;&#x9732;" class="anchor-navigation-ex-anchor" href="#&#x5185;&#x5B58;&#x6CC4;&#x9732;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5185;&#x5B58;&#x6CC4;&#x9732;" class="plugin-anchor" href="#&#x5185;&#x5B58;&#x6CC4;&#x9732;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5185;&#x5B58;&#x6CC4;&#x9732;</h4>
<p><code>ThreadLocalMap</code> &#x4E2D;&#x4F7F;&#x7528;&#x7684; key &#x4E3A; <code>ThreadLocal</code> &#x7684;&#x5F31;&#x5F15;&#x7528;,&#x800C; value &#x662F;&#x5F3A;&#x5F15;&#x7528;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x5982;&#x679C; <code>ThreadLocal</code> &#x6CA1;&#x6709;&#x88AB;&#x5916;&#x90E8;&#x5F3A;&#x5F15;&#x7528;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5728;&#x5783;&#x573E;&#x56DE;&#x6536;&#x7684;&#x65F6;&#x5019;&#x4F1A; key &#x4F1A;&#x88AB;&#x6E05;&#x7406;&#x6389;&#xFF0C;&#x800C; value &#x4E0D;&#x4F1A;&#x88AB;&#x6E05;&#x7406;&#x6389;&#x3002;&#x8FD9;&#x6837;&#x4E00;&#x6765;&#xFF0C;<code>ThreadLocalMap</code> &#x4E2D;&#x5C31;&#x4F1A;&#x51FA;&#x73B0;key&#x4E3A;null&#x7684;Entry&#x3002;&#x5047;&#x5982;&#x6211;&#x4EEC;&#x4E0D;&#x505A;&#x4EFB;&#x4F55;&#x63AA;&#x65BD;&#x7684;&#x8BDD;&#xFF0C;value &#x6C38;&#x8FDC;&#x65E0;&#x6CD5;&#x88AB;GC &#x56DE;&#x6536;&#xFF0C;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x5C31;&#x53EF;&#x80FD;&#x4F1A;&#x4EA7;&#x751F;&#x5185;&#x5B58;&#x6CC4;&#x9732;&#x3002;ThreadLocalMap&#x5B9E;&#x73B0;&#x4E2D;&#x5DF2;&#x7ECF;&#x8003;&#x8651;&#x4E86;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#xFF0C;&#x5728;&#x8C03;&#x7528; <code>set()</code>&#x3001;<code>get()</code>&#x3001;<code>remove()</code> &#x65B9;&#x6CD5;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F1A;&#x6E05;&#x7406;&#x6389; key &#x4E3A; null &#x7684;&#x8BB0;&#x5F55;&#x3002;&#x4F7F;&#x7528;&#x5B8C; <code>ThreadLocal</code>&#x65B9;&#x6CD5;&#x540E; &#x6700;&#x597D;&#x624B;&#x52A8;&#x8C03;&#x7528;<code>remove()</code>&#x65B9;&#x6CD5;</p>
<h3 id="&#x5E76;&#x53D1;&#x96C6;&#x5408;&#x5BB9;&#x5668;"><a name="&#x5E76;&#x53D1;&#x96C6;&#x5408;&#x5BB9;&#x5668;" class="anchor-navigation-ex-anchor" href="#&#x5E76;&#x53D1;&#x96C6;&#x5408;&#x5BB9;&#x5668;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5E76;&#x53D1;&#x96C6;&#x5408;&#x5BB9;&#x5668;" class="plugin-anchor" href="#&#x5E76;&#x53D1;&#x96C6;&#x5408;&#x5BB9;&#x5668;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5E76;&#x53D1;&#x96C6;&#x5408;&#x5BB9;&#x5668;</h3>
<h4 id="&#x4E3A;&#x4EC0;&#x4E48;&#x8BF4;arraylist&#x7EBF;&#x7A0B;&#x4E0D;&#x5B89;&#x5168;&#xFF1F;"><a name="&#x4E3A;&#x4EC0;&#x4E48;&#x8BF4;arraylist&#x7EBF;&#x7A0B;&#x4E0D;&#x5B89;&#x5168;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4E3A;&#x4EC0;&#x4E48;&#x8BF4;arraylist&#x7EBF;&#x7A0B;&#x4E0D;&#x5B89;&#x5168;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4E3A;&#x4EC0;&#x4E48;&#x8BF4;arraylist&#x7EBF;&#x7A0B;&#x4E0D;&#x5B89;&#x5168;&#xFF1F;" class="plugin-anchor" href="#&#x4E3A;&#x4EC0;&#x4E48;&#x8BF4;arraylist&#x7EBF;&#x7A0B;&#x4E0D;&#x5B89;&#x5168;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4E3A;&#x4EC0;&#x4E48;&#x8BF4;ArrayList&#x7EBF;&#x7A0B;&#x4E0D;&#x5B89;&#x5168;&#xFF1F;</h4>
<p><strong>&#x770B;add&#x65B9;&#x6CD5;&#x7684;&#x6E90;&#x7801;</strong></p>
<pre><code class="lang-java"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">add</span><span class="hljs-params">(E e)</span> </span>{

    <span class="hljs-comment">/**
     * &#x6DFB;&#x52A0;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x65F6;&#xFF0C;&#x505A;&#x4E86;&#x5982;&#x4E0B;&#x4E24;&#x6B65;&#x64CD;&#x4F5C;
     * 1.&#x5224;&#x65AD;&#x5217;&#x8868;&#x7684;capacity&#x5BB9;&#x91CF;&#x662F;&#x5426;&#x8DB3;&#x591F;&#xFF0C;&#x662F;&#x5426;&#x9700;&#x8981;&#x6269;&#x5BB9;
     * 2.&#x771F;&#x6B63;&#x5C06;&#x5143;&#x7D20;&#x653E;&#x5728;&#x5217;&#x8868;&#x7684;&#x5143;&#x7D20;&#x6570;&#x7EC4;&#x91CC;&#x9762;
     */</span>
    ensureCapacityInternal(size + <span class="hljs-number">1</span>);  <span class="hljs-comment">// Increments modCount!! // &#x53EF;&#x80FD;&#x56E0;&#x4E3A;&#x8BE5;&#x64CD;&#x4F5C;&#xFF0C;&#x5BFC;&#x81F4;&#x4E0B;&#x4E00;&#x6B65;&#x53D1;&#x751F;&#x6570;&#x7EC4;&#x8D8A;&#x754C;</span>
    elementData[size++] = e; <span class="hljs-comment">// &#x53EF;&#x80FD;null&#x503C;</span>
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">true</span>;
}
</code></pre>
<p><strong>&#x6570;&#x7EC4;&#x8D8A;&#x754C;</strong></p>
<ol>
<li>&#x5217;&#x8868;&#x5927;&#x5C0F;&#x4E3A;9&#xFF0C;&#x5373;size=9</li>
<li>&#x7EBF;&#x7A0B;A&#x5F00;&#x59CB;&#x8FDB;&#x5165;add&#x65B9;&#x6CD5;&#xFF0C;&#x8FD9;&#x65F6;&#x5B83;&#x83B7;&#x53D6;&#x5230;size&#x7684;&#x503C;&#x4E3A;9&#xFF0C;&#x8C03;&#x7528;ensureCapacityInternal&#x65B9;&#x6CD5;&#x8FDB;&#x884C;&#x5BB9;&#x91CF;&#x5224;&#x65AD;&#x3002;</li>
<li>&#x7EBF;&#x7A0B;B&#x6B64;&#x65F6;&#x4E5F;&#x8FDB;&#x5165;add&#x65B9;&#x6CD5;&#xFF0C;&#x5B83;&#x83B7;&#x53D6;&#x5230;size&#x7684;&#x503C;&#x4E5F;&#x4E3A;9&#xFF0C;&#x4E5F;&#x5F00;&#x59CB;&#x8C03;&#x7528;ensureCapacityInternal&#x65B9;&#x6CD5;&#x3002;</li>
<li>&#x7EBF;&#x7A0B;A&#x53D1;&#x73B0;&#x9700;&#x6C42;&#x5927;&#x5C0F;&#x4E3A;10&#xFF0C;&#x800C;elementData&#x7684;&#x5927;&#x5C0F;&#x5C31;&#x4E3A;10&#xFF0C;&#x53EF;&#x4EE5;&#x5BB9;&#x7EB3;&#x3002;&#x4E8E;&#x662F;&#x5B83;&#x4E0D;&#x518D;&#x6269;&#x5BB9;&#xFF0C;&#x8FD4;&#x56DE;&#x3002;</li>
<li>&#x7EBF;&#x7A0B;B&#x4E5F;&#x53D1;&#x73B0;&#x9700;&#x6C42;&#x5927;&#x5C0F;&#x4E3A;10&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x5BB9;&#x7EB3;&#xFF0C;&#x8FD4;&#x56DE;&#x3002;</li>
<li>&#x7EBF;&#x7A0B;A&#x5F00;&#x59CB;&#x8FDB;&#x884C;&#x8BBE;&#x7F6E;&#x503C;&#x64CD;&#x4F5C;&#xFF0C; elementData[size++] = e &#x64CD;&#x4F5C;&#x3002;&#x6B64;&#x65F6;size&#x53D8;&#x4E3A;10&#x3002;</li>
<li>&#x7EBF;&#x7A0B;B&#x4E5F;&#x5F00;&#x59CB;&#x8FDB;&#x884C;&#x8BBE;&#x7F6E;&#x503C;&#x64CD;&#x4F5C;&#xFF0C;&#x5B83;&#x5C1D;&#x8BD5;&#x8BBE;&#x7F6E;elementData[10] = e&#xFF0C;&#x800C;elementData&#x6CA1;&#x6709;&#x8FDB;&#x884C;&#x8FC7;&#x6269;&#x5BB9;&#xFF0C;&#x5B83;&#x7684;&#x4E0B;&#x6807;&#x6700;&#x5927;&#x4E3A;9&#x3002;&#x4E8E;&#x662F;&#x6B64;&#x65F6;&#x4F1A;&#x62A5;&#x51FA;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#x8D8A;&#x754C;&#x7684;&#x5F02;&#x5E38;ArrayIndexOutOfBoundsException.</li>
</ol>
<p><strong>null&#x503C;&#x60C5;&#x51B5;</strong></p>
<p><strong>elementData[size++] = e&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;</strong>&#xFF1A;</p>
<ol>
<li>elementData[size] = e;</li>
<li>size = size + 1;</li>
</ol>
<p>&#x903B;&#x8F91;&#xFF1A;</p>
<ol>
<li>&#x5217;&#x8868;&#x5927;&#x5C0F;&#x4E3A;0&#xFF0C;&#x5373;size=0</li>
<li>&#x7EBF;&#x7A0B;A&#x5F00;&#x59CB;&#x6DFB;&#x52A0;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x503C;&#x4E3A;A&#x3002;&#x6B64;&#x65F6;&#x5B83;&#x6267;&#x884C;&#x7B2C;&#x4E00;&#x6761;&#x64CD;&#x4F5C;&#xFF0C;&#x5C06;A&#x653E;&#x5728;&#x4E86;elementData&#x4E0B;&#x6807;&#x4E3A;0&#x7684;&#x4F4D;&#x7F6E;&#x4E0A;&#x3002;</li>
<li>&#x63A5;&#x7740;&#x7EBF;&#x7A0B;B&#x521A;&#x597D;&#x4E5F;&#x8981;&#x5F00;&#x59CB;&#x6DFB;&#x52A0;&#x4E00;&#x4E2A;&#x503C;&#x4E3A;B&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x4E14;&#x8D70;&#x5230;&#x4E86;&#x7B2C;&#x4E00;&#x6B65;&#x64CD;&#x4F5C;&#x3002;&#x6B64;&#x65F6;&#x7EBF;&#x7A0B;B&#x83B7;&#x53D6;&#x5230;size&#x7684;&#x503C;&#x4F9D;&#x7136;&#x4E3A;0&#xFF0C;&#x4E8E;&#x662F;&#x5B83;&#x5C06;B&#x4E5F;&#x653E;&#x5728;&#x4E86;elementData&#x4E0B;&#x6807;&#x4E3A;0&#x7684;&#x4F4D;&#x7F6E;&#x4E0A;&#x3002;</li>
<li>&#x7EBF;&#x7A0B;A&#x5F00;&#x59CB;&#x5C06;size&#x7684;&#x503C;&#x589E;&#x52A0;&#x4E3A;1</li>
<li>&#x7EBF;&#x7A0B;B&#x5F00;&#x59CB;&#x5C06;size&#x7684;&#x503C;&#x589E;&#x52A0;&#x4E3A;2</li>
</ol>
<p><strong>&#x8FD9;&#x6837;&#x7EBF;&#x7A0B;AB&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#x540E;&#xFF0C;&#x7406;&#x60F3;&#x4E2D;&#x60C5;&#x51B5;&#x4E3A;size&#x4E3A;2&#xFF0C;elementData&#x4E0B;&#x6807;0&#x7684;&#x4F4D;&#x7F6E;&#x4E3A;A&#xFF0C;&#x4E0B;&#x6807;1&#x7684;&#x4F4D;&#x7F6E;&#x4E3A;B&#x3002;&#x800C;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x53D8;&#x6210;&#x4E86;size&#x4E3A;2&#xFF0C;elementData&#x4E0B;&#x6807;&#x4E3A;0&#x7684;&#x4F4D;&#x7F6E;&#x53D8;&#x6210;&#x4E86;B&#xFF0C;&#x4E0B;&#x6807;1&#x7684;&#x4F4D;&#x7F6E;&#x4E0A;&#x4EC0;&#x4E48;&#x90FD;&#x6CA1;&#x6709;&#x3002;&#x5E76;&#x4E14;&#x540E;&#x7EED;&#x9664;&#x975E;&#x4F7F;&#x7528;set&#x65B9;&#x6CD5;&#x4FEE;&#x6539;&#x6B64;&#x4F4D;&#x7F6E;&#x7684;&#x503C;&#xFF0C;&#x5426;&#x5219;&#x5C06;&#x4E00;&#x76F4;&#x4E3A;null&#xFF0C;&#x56E0;&#x4E3A;size&#x4E3A;2&#xFF0C;&#x6DFB;&#x52A0;&#x5143;&#x7D20;&#x65F6;&#x4F1A;&#x4ECE;&#x4E0B;&#x6807;&#x4E3A;2&#x7684;&#x4F4D;&#x7F6E;&#x4E0A;&#x5F00;&#x59CB;&#x3002;</strong></p>
<h4 id="&#x89E3;&#x51B3;&#x975E;&#x5B89;&#x5168;&#x96C6;&#x5408;&#x7684;&#x5E76;&#x53D1;&#x90FD;&#x6709;&#x54EA;&#x4E9B;&#xFF1F;"><a name="&#x89E3;&#x51B3;&#x975E;&#x5B89;&#x5168;&#x96C6;&#x5408;&#x7684;&#x5E76;&#x53D1;&#x90FD;&#x6709;&#x54EA;&#x4E9B;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x89E3;&#x51B3;&#x975E;&#x5B89;&#x5168;&#x96C6;&#x5408;&#x7684;&#x5E76;&#x53D1;&#x90FD;&#x6709;&#x54EA;&#x4E9B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x89E3;&#x51B3;&#x975E;&#x5B89;&#x5168;&#x96C6;&#x5408;&#x7684;&#x5E76;&#x53D1;&#x90FD;&#x6709;&#x54EA;&#x4E9B;&#xFF1F;" class="plugin-anchor" href="#&#x89E3;&#x51B3;&#x975E;&#x5B89;&#x5168;&#x96C6;&#x5408;&#x7684;&#x5E76;&#x53D1;&#x90FD;&#x6709;&#x54EA;&#x4E9B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x89E3;&#x51B3;&#x975E;&#x5B89;&#x5168;&#x96C6;&#x5408;&#x7684;&#x5E76;&#x53D1;&#x90FD;&#x6709;&#x54EA;&#x4E9B;&#xFF1F;</h4>
<p><a href="https://github.com/DreamCats/JavaBooks/blob/master/Multithread/src/com/juc/collectiontest/ContainerNotSafeDemo.java" target="_blank">ArrayList-&gt;Vector-&gt;SynchronizedList-&gt;CopyOnWriteArrayList</a></p>
<p><a href="https://github.com/DreamCats/JavaBooks/blob/master/Multithread/src/com/juc/collectiontest/HashSetTest.java" target="_blank">ArraySet-&gt;SynchronizedSet-&gt;CopyOnWriteArraySet</a></p>
<p><a href="https://github.com/DreamCats/JavaBooks/blob/master/Multithread/src/com/juc/collectiontest/MapSafe.java" target="_blank">HashMap-&gt;SynchronizedMap-&gt;ConcurrentHashMap</a></p>
<h3 id="&#x5E76;&#x53D1;&#x540C;&#x6B65;&#x5BB9;&#x5668;"><a name="&#x5E76;&#x53D1;&#x540C;&#x6B65;&#x5BB9;&#x5668;" class="anchor-navigation-ex-anchor" href="#&#x5E76;&#x53D1;&#x540C;&#x6B65;&#x5BB9;&#x5668;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5E76;&#x53D1;&#x540C;&#x6B65;&#x5BB9;&#x5668;" class="plugin-anchor" href="#&#x5E76;&#x53D1;&#x540C;&#x6B65;&#x5BB9;&#x5668;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5E76;&#x53D1;&#x540C;&#x6B65;&#x5BB9;&#x5668;</h3>
<h4 id="aqs&#x539F;&#x7406;"><a name="aqs&#x539F;&#x7406;" class="anchor-navigation-ex-anchor" href="#aqs&#x539F;&#x7406;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="aqs&#x539F;&#x7406;" class="plugin-anchor" href="#aqs&#x539F;&#x7406;"><i class="fa fa-link" aria-hidden="true"></i></a>AQS&#x539F;&#x7406;</h4>
<p>AQS &#x4F7F;&#x7528;&#x4E00;&#x4E2A; int &#x6210;&#x5458;&#x53D8;&#x91CF;&#x6765;&#x8868;&#x793A;&#x540C;&#x6B65;&#x72B6;&#x6001;&#xFF0C;&#x901A;&#x8FC7;&#x5185;&#x7F6E;&#x7684; FIFO &#x961F;&#x5217;&#x6765;&#x5B8C;&#x6210;&#x83B7;&#x53D6;&#x8D44;&#x6E90;&#x7EBF;&#x7A0B;&#x7684;&#x6392;&#x961F;&#x5DE5;&#x4F5C;&#x3002;AQS &#x4F7F;&#x7528; CAS &#x5BF9;&#x8BE5;&#x540C;&#x6B65;&#x72B6;&#x6001;&#x8FDB;&#x884C;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x5B9E;&#x73B0;&#x5BF9;&#x5176;&#x503C;&#x7684;&#x4FEE;&#x6539;&#x3002;</p>
<pre><code class="lang-java"><span class="hljs-keyword">private</span> <span class="hljs-keyword">volatile</span> <span class="hljs-keyword">int</span> state;<span class="hljs-comment">//&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#xFF0C;&#x4F7F;&#x7528;volatile&#x4FEE;&#x9970;&#x4FDD;&#x8BC1;&#x7EBF;&#x7A0B;&#x53EF;&#x89C1;&#x6027;</span>
</code></pre>
<p>&#x72B6;&#x6001;&#x4FE1;&#x606F;&#x901A;&#x8FC7; protected &#x7C7B;&#x578B;&#x7684;<code>getState</code>&#xFF0C;<code>setState</code>&#xFF0C;<code>compareAndSetState</code>&#x8FDB;&#x884C;&#x64CD;&#x4F5C;</p>
<pre><code class="lang-java"><span class="hljs-comment">//&#x8FD4;&#x56DE;&#x540C;&#x6B65;&#x72B6;&#x6001;&#x7684;&#x5F53;&#x524D;&#x503C;</span>
<span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> <span class="hljs-title">getState</span><span class="hljs-params">()</span> </span>{
        <span class="hljs-keyword">return</span> state;
}
 <span class="hljs-comment">// &#x8BBE;&#x7F6E;&#x540C;&#x6B65;&#x72B6;&#x6001;&#x7684;&#x503C;</span>
<span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setState</span><span class="hljs-params">(<span class="hljs-keyword">int</span> newState)</span> </span>{
        state = newState;
}
<span class="hljs-comment">//&#x539F;&#x5B50;&#x5730;&#xFF08;CAS&#x64CD;&#x4F5C;&#xFF09;&#x5C06;&#x540C;&#x6B65;&#x72B6;&#x6001;&#x503C;&#x8BBE;&#x7F6E;&#x4E3A;&#x7ED9;&#x5B9A;&#x503C;update&#x5982;&#x679C;&#x5F53;&#x524D;&#x540C;&#x6B65;&#x72B6;&#x6001;&#x7684;&#x503C;&#x7B49;&#x4E8E;expect&#xFF08;&#x671F;&#x671B;&#x503C;&#xFF09;</span>
<span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">compareAndSetState</span><span class="hljs-params">(<span class="hljs-keyword">int</span> expect, <span class="hljs-keyword">int</span> update)</span> </span>{
        <span class="hljs-keyword">return</span> unsafe.compareAndSwapInt(<span class="hljs-keyword">this</span>, stateOffset, expect, update);
}
</code></pre>
<p><strong>AQS &#x5B9A;&#x4E49;&#x4E24;&#x79CD;&#x8D44;&#x6E90;&#x5171;&#x4EAB;&#x65B9;&#x5F0F;</strong></p>
<ol>
<li><p><strong>Exclusive</strong>&#xFF08;&#x72EC;&#x5360;&#xFF09;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x80FD;&#x6267;&#x884C;&#xFF0C;&#x5982; ReentrantLock&#x3002;&#x53C8;&#x53EF;&#x5206;&#x4E3A;&#x516C;&#x5E73;&#x9501;&#x548C;&#x975E;&#x516C;&#x5E73;&#x9501;,ReentrantLock &#x540C;&#x65F6;&#x652F;&#x6301;&#x4E24;&#x79CD;&#x9501;&#x3002;</p>
<p>&#x603B;&#x7ED3;&#xFF1A;&#x516C;&#x5E73;&#x9501;&#x548C;&#x975E;&#x516C;&#x5E73;&#x9501;&#x53EA;&#x6709;&#x4E24;&#x5904;&#x4E0D;&#x540C;&#xFF1A;</p>
<ol>
<li>&#x975E;&#x516C;&#x5E73;&#x9501;&#x5728;&#x8C03;&#x7528; lock &#x540E;&#xFF0C;&#x9996;&#x5148;&#x5C31;&#x4F1A;&#x8C03;&#x7528; CAS &#x8FDB;&#x884C;&#x4E00;&#x6B21;&#x62A2;&#x9501;&#xFF0C;&#x5982;&#x679C;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x6070;&#x5DE7;&#x9501;&#x6CA1;&#x6709;&#x88AB;&#x5360;&#x7528;&#xFF0C;&#x90A3;&#x4E48;&#x76F4;&#x63A5;&#x5C31;&#x83B7;&#x53D6;&#x5230;&#x9501;&#x8FD4;&#x56DE;&#x4E86;&#x3002;</li>
<li>&#x975E;&#x516C;&#x5E73;&#x9501;&#x5728; CAS &#x5931;&#x8D25;&#x540E;&#xFF0C;&#x548C;&#x516C;&#x5E73;&#x9501;&#x4E00;&#x6837;&#x90FD;&#x4F1A;&#x8FDB;&#x5165;&#x5230; tryAcquire &#x65B9;&#x6CD5;&#xFF0C;&#x5728; tryAcquire &#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x53D1;&#x73B0;&#x9501;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x88AB;&#x91CA;&#x653E;&#x4E86;&#xFF08;state == 0&#xFF09;&#xFF0C;&#x975E;&#x516C;&#x5E73;&#x9501;&#x4F1A;&#x76F4;&#x63A5; CAS &#x62A2;&#x9501;&#xFF0C;&#x4F46;&#x662F;&#x516C;&#x5E73;&#x9501;&#x4F1A;&#x5224;&#x65AD;&#x7B49;&#x5F85;&#x961F;&#x5217;&#x662F;&#x5426;&#x6709;&#x7EBF;&#x7A0B;&#x5904;&#x4E8E;&#x7B49;&#x5F85;&#x72B6;&#x6001;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x5219;&#x4E0D;&#x53BB;&#x62A2;&#x9501;&#xFF0C;&#x4E56;&#x4E56;&#x6392;&#x5230;&#x540E;&#x9762;&#x3002;</li>
</ol>
</li>
<li><p><strong>Share</strong>&#xFF08;&#x5171;&#x4EAB;&#xFF09;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x53EF;&#x540C;&#x65F6;&#x6267;&#x884C;&#xFF0C;&#x5982; Semaphore/CountDownLatch&#x3002;Semaphore&#x3001; CyclicBarrier&#x3001;ReadWriteLock &#x3002;</p>
</li>
</ol>
<p><strong>AQS &#x4F7F;&#x7528;&#x4E86;&#x6A21;&#x677F;&#x65B9;&#x6CD5;&#x6A21;&#x5F0F;&#xFF0C;&#x81EA;&#x5B9A;&#x4E49;&#x540C;&#x6B65;&#x5668;&#x65F6;&#x9700;&#x8981;&#x91CD;&#x5199;&#x4E0B;&#x9762;&#x51E0;&#x4E2A; AQS &#x63D0;&#x4F9B;&#x7684;&#x6A21;&#x677F;&#x65B9;&#x6CD5;&#xFF1A;</strong></p>
<pre><code class="lang-java">isHeldExclusively()<span class="hljs-comment">//&#x8BE5;&#x7EBF;&#x7A0B;&#x662F;&#x5426;&#x6B63;&#x5728;&#x72EC;&#x5360;&#x8D44;&#x6E90;&#x3002;&#x53EA;&#x6709;&#x7528;&#x5230;condition&#x624D;&#x9700;&#x8981;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#x3002;</span>
tryAcquire(<span class="hljs-keyword">int</span>)<span class="hljs-comment">//&#x72EC;&#x5360;&#x65B9;&#x5F0F;&#x3002;&#x5C1D;&#x8BD5;&#x83B7;&#x53D6;&#x8D44;&#x6E90;&#xFF0C;&#x6210;&#x529F;&#x5219;&#x8FD4;&#x56DE;true&#xFF0C;&#x5931;&#x8D25;&#x5219;&#x8FD4;&#x56DE;false&#x3002;</span>
tryRelease(<span class="hljs-keyword">int</span>)<span class="hljs-comment">//&#x72EC;&#x5360;&#x65B9;&#x5F0F;&#x3002;&#x5C1D;&#x8BD5;&#x91CA;&#x653E;&#x8D44;&#x6E90;&#xFF0C;&#x6210;&#x529F;&#x5219;&#x8FD4;&#x56DE;true&#xFF0C;&#x5931;&#x8D25;&#x5219;&#x8FD4;&#x56DE;false&#x3002;</span>
tryAcquireShared(<span class="hljs-keyword">int</span>)<span class="hljs-comment">//&#x5171;&#x4EAB;&#x65B9;&#x5F0F;&#x3002;&#x5C1D;&#x8BD5;&#x83B7;&#x53D6;&#x8D44;&#x6E90;&#x3002;&#x8D1F;&#x6570;&#x8868;&#x793A;&#x5931;&#x8D25;&#xFF1B;0&#x8868;&#x793A;&#x6210;&#x529F;&#xFF0C;&#x4F46;&#x6CA1;&#x6709;&#x5269;&#x4F59;&#x53EF;&#x7528;&#x8D44;&#x6E90;&#xFF1B;&#x6B63;&#x6570;&#x8868;&#x793A;&#x6210;&#x529F;&#xFF0C;&#x4E14;&#x6709;&#x5269;&#x4F59;&#x8D44;&#x6E90;&#x3002;</span>
tryReleaseShared(<span class="hljs-keyword">int</span>)<span class="hljs-comment">//&#x5171;&#x4EAB;&#x65B9;&#x5F0F;&#x3002;&#x5C1D;&#x8BD5;&#x91CA;&#x653E;&#x8D44;&#x6E90;&#xFF0C;&#x6210;&#x529F;&#x5219;&#x8FD4;&#x56DE;true&#xFF0C;&#x5931;&#x8D25;&#x5219;&#x8FD4;&#x56DE;false&#x3002;</span>
</code></pre>
<h4 id="countdownlatch"><a name="countdownlatch" class="anchor-navigation-ex-anchor" href="#countdownlatch"><i class="fa fa-link" aria-hidden="true"></i></a><a name="countdownlatch" class="plugin-anchor" href="#countdownlatch"><i class="fa fa-link" aria-hidden="true"></i></a>CountDownLatch</h4>
<p>CountDownLatch&#x662F;&#x5171;&#x4EAB;&#x9501;&#x7684;&#x4E00;&#x79CD;&#x5B9E;&#x73B0;,&#x5B83;&#x9ED8;&#x8BA4;&#x6784;&#x9020; AQS &#x7684; state &#x503C;&#x4E3A; count&#x3002;&#x5F53;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;countDown&#x65B9;&#x6CD5;&#x65F6;,&#x5176;&#x5B9E;&#x4F7F;&#x7528;&#x4E86;<code>tryReleaseShared</code>&#x65B9;&#x6CD5;&#x4EE5;CAS&#x7684;&#x64CD;&#x4F5C;&#x6765;&#x51CF;&#x5C11;state,&#x76F4;&#x81F3;state&#x4E3A;0&#x5C31;&#x4EE3;&#x8868;&#x6240;&#x6709;&#x7684;&#x7EBF;&#x7A0B;&#x90FD;&#x8C03;&#x7528;&#x4E86;countDown&#x65B9;&#x6CD5;&#x3002;&#x5F53;&#x8C03;&#x7528;await&#x65B9;&#x6CD5;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5982;&#x679C;state&#x4E0D;&#x4E3A;0&#xFF0C;&#x5C31;&#x4EE3;&#x8868;&#x4ECD;&#x7136;&#x6709;&#x7EBF;&#x7A0B;&#x6CA1;&#x6709;&#x8C03;&#x7528;countDown&#x65B9;&#x6CD5;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x628A;&#x5DF2;&#x7ECF;&#x8C03;&#x7528;&#x8FC7;countDown&#x7684;&#x7EBF;&#x7A0B;&#x90FD;&#x653E;&#x5165;&#x963B;&#x585E;&#x961F;&#x5217;Park,&#x5E76;&#x81EA;&#x65CB;CAS&#x5224;&#x65AD;state == 0&#xFF0C;&#x76F4;&#x81F3;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;&#x4E86;countDown&#xFF0C;&#x4F7F;&#x5F97;state == 0&#xFF0C;&#x4E8E;&#x662F;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#x4FBF;&#x5224;&#x65AD;&#x6210;&#x529F;&#xFF0C;&#x5168;&#x90E8;&#x5F80;&#x4E0B;&#x6267;&#x884C;&#x3002;</p>
<p>&#x4E09;&#x79CD;&#x7528;&#x6CD5;&#xFF1A;</p>
<ol>
<li>&#x67D0;&#x4E00;&#x7EBF;&#x7A0B;&#x5728;&#x5F00;&#x59CB;&#x8FD0;&#x884C;&#x524D;&#x7B49;&#x5F85; n &#x4E2A;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#x3002;&#x5C06; CountDownLatch &#x7684;&#x8BA1;&#x6570;&#x5668;&#x521D;&#x59CB;&#x5316;&#x4E3A; n &#xFF1A;<code>new CountDownLatch(n)</code>&#xFF0C;&#x6BCF;&#x5F53;&#x4E00;&#x4E2A;&#x4EFB;&#x52A1;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#xFF0C;&#x5C31;&#x5C06;&#x8BA1;&#x6570;&#x5668;&#x51CF; 1 <code>countdownlatch.countDown()</code>&#xFF0C;&#x5F53;&#x8BA1;&#x6570;&#x5668;&#x7684;&#x503C;&#x53D8;&#x4E3A; 0 &#x65F6;&#xFF0C;&#x5728;<code>CountDownLatch&#x4E0A; await()</code> &#x7684;&#x7EBF;&#x7A0B;&#x5C31;&#x4F1A;&#x88AB;&#x5524;&#x9192;&#x3002;&#x4E00;&#x4E2A;&#x5178;&#x578B;&#x5E94;&#x7528;&#x573A;&#x666F;&#x5C31;&#x662F;&#x542F;&#x52A8;&#x4E00;&#x4E2A;&#x670D;&#x52A1;&#x65F6;&#xFF0C;&#x4E3B;&#x7EBF;&#x7A0B;&#x9700;&#x8981;&#x7B49;&#x5F85;&#x591A;&#x4E2A;&#x7EC4;&#x4EF6;&#x52A0;&#x8F7D;&#x5B8C;&#x6BD5;&#xFF0C;&#x4E4B;&#x540E;&#x518D;&#x7EE7;&#x7EED;&#x6267;&#x884C;&#x3002;</li>
<li>&#x5B9E;&#x73B0;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x4EFB;&#x52A1;&#x7684;&#x6700;&#x5927;&#x5E76;&#x884C;&#x6027;&#x3002;&#x6CE8;&#x610F;&#x662F;&#x5E76;&#x884C;&#x6027;&#xFF0C;&#x4E0D;&#x662F;&#x5E76;&#x53D1;&#xFF0C;&#x5F3A;&#x8C03;&#x7684;&#x662F;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x5728;&#x67D0;&#x4E00;&#x65F6;&#x523B;&#x540C;&#x65F6;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x3002;&#x7C7B;&#x4F3C;&#x4E8E;&#x8D5B;&#x8DD1;&#xFF0C;&#x5C06;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x653E;&#x5230;&#x8D77;&#x70B9;&#xFF0C;&#x7B49;&#x5F85;&#x53D1;&#x4EE4;&#x67AA;&#x54CD;&#xFF0C;&#x7136;&#x540E;&#x540C;&#x65F6;&#x5F00;&#x8DD1;&#x3002;&#x505A;&#x6CD5;&#x662F;&#x521D;&#x59CB;&#x5316;&#x4E00;&#x4E2A;&#x5171;&#x4EAB;&#x7684; <code>CountDownLatch</code> &#x5BF9;&#x8C61;&#xFF0C;&#x5C06;&#x5176;&#x8BA1;&#x6570;&#x5668;&#x521D;&#x59CB;&#x5316;&#x4E3A; 1 &#xFF1A;<code>new CountDownLatch(1)</code>&#xFF0C;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x5728;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x4EFB;&#x52A1;&#x524D;&#x9996;&#x5148; <code>coundownlatch.await()</code>&#xFF0C;&#x5F53;&#x4E3B;&#x7EBF;&#x7A0B;&#x8C03;&#x7528; countDown() &#x65F6;&#xFF0C;&#x8BA1;&#x6570;&#x5668;&#x53D8;&#x4E3A; 0&#xFF0C;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x540C;&#x65F6;&#x88AB;&#x5524;&#x9192;&#x3002;</li>
<li>&#x6B7B;&#x9501;&#x68C0;&#x6D4B;&#xFF1A;&#x4E00;&#x4E2A;&#x975E;&#x5E38;&#x65B9;&#x4FBF;&#x7684;&#x4F7F;&#x7528;&#x573A;&#x666F;&#x662F;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; n &#x4E2A;&#x7EBF;&#x7A0B;&#x8BBF;&#x95EE;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#xFF0C;&#x5728;&#x6BCF;&#x6B21;&#x6D4B;&#x8BD5;&#x9636;&#x6BB5;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x76EE;&#x662F;&#x4E0D;&#x540C;&#x7684;&#xFF0C;&#x5E76;&#x5C1D;&#x8BD5;&#x4EA7;&#x751F;&#x6B7B;&#x9501;&#x3002;</li>
</ol>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CountDownLatchDemo</span> </span>{

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> <span class="hljs-keyword">throws</span> InterruptedException </span>{
        countDownLatchTest();
<span class="hljs-comment">//        general();</span>
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">general</span><span class="hljs-params">()</span> </span>{
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">6</span>; i++) {
            <span class="hljs-keyword">new</span> Thread(() -&gt; {
                System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x4E0A;&#x5B8C;&#x81EA;&#x4E60;&#xFF0C;&#x79BB;&#x5F00;&#x6559;&#x5E08;&quot;</span>);
            }, <span class="hljs-string">&quot;Thread --&gt; &quot;</span> + i).start();
        }
        <span class="hljs-keyword">while</span> (Thread.activeCount() &gt; <span class="hljs-number">2</span>) {
            <span class="hljs-keyword">try</span> { TimeUnit.SECONDS.sleep(<span class="hljs-number">2</span>); } <span class="hljs-keyword">catch</span> (InterruptedException e) { e.printStackTrace(); }
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; ====&#x73ED;&#x957F;&#x6700;&#x540E;&#x8D70;&#x4EBA;&quot;</span>);
        }
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">countDownLatchTest</span><span class="hljs-params">()</span> <span class="hljs-keyword">throws</span> InterruptedException </span>{
        CountDownLatch countDownLatch = <span class="hljs-keyword">new</span> CountDownLatch(<span class="hljs-number">6</span>);
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">6</span>; i++) {
            <span class="hljs-keyword">new</span> Thread(() -&gt; {
                System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x4E0A;&#x5B8C;&#x81EA;&#x4E60;&#xFF0C;&#x79BB;&#x5F00;&#x6559;&#x5E08;&quot;</span>);
                countDownLatch.countDown();
            }, <span class="hljs-string">&quot;Thread --&gt; &quot;</span> + i).start();
        }
        countDownLatch.await();
        System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; ====&#x73ED;&#x957F;&#x6700;&#x540E;&#x8D70;&#x4EBA;&quot;</span>);
    }
}
</code></pre>
<h4 id="cyclicbarrier"><a name="cyclicbarrier" class="anchor-navigation-ex-anchor" href="#cyclicbarrier"><i class="fa fa-link" aria-hidden="true"></i></a><a name="cyclicbarrier" class="plugin-anchor" href="#cyclicbarrier"><i class="fa fa-link" aria-hidden="true"></i></a>CyclicBarrier</h4>
<p>CyclicBarrier &#x7684;&#x5B57;&#x9762;&#x610F;&#x601D;&#x662F;&#x53EF;&#x5FAA;&#x73AF;&#x4F7F;&#x7528;&#xFF08;Cyclic&#xFF09;&#x7684;&#x5C4F;&#x969C;&#xFF08;Barrier&#xFF09;&#x3002;&#x5B83;&#x8981;&#x505A;&#x7684;&#x4E8B;&#x60C5;&#x662F;&#xFF0C;&#x8BA9;&#x4E00;&#x7EC4;&#x7EBF;&#x7A0B;&#x5230;&#x8FBE;&#x4E00;&#x4E2A;&#x5C4F;&#x969C;&#xFF08;&#x4E5F;&#x53EF;&#x4EE5;&#x53EB;&#x540C;&#x6B65;&#x70B9;&#xFF09;&#x65F6;&#x88AB;&#x963B;&#x585E;&#xFF0C;&#x76F4;&#x5230;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5230;&#x8FBE;&#x5C4F;&#x969C;&#x65F6;&#xFF0C;&#x5C4F;&#x969C;&#x624D;&#x4F1A;&#x5F00;&#x95E8;&#xFF0C;&#x6240;&#x6709;&#x88AB;&#x5C4F;&#x969C;&#x62E6;&#x622A;&#x7684;&#x7EBF;&#x7A0B;&#x624D;&#x4F1A;&#x7EE7;&#x7EED;&#x5E72;&#x6D3B;&#x3002;CyclicBarrier &#x9ED8;&#x8BA4;&#x7684;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x662F; <code>CyclicBarrier(int parties)</code>&#xFF0C;&#x5176;&#x53C2;&#x6570;&#x8868;&#x793A;&#x5C4F;&#x969C;&#x62E6;&#x622A;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#xFF0C;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;<code>await</code>&#x65B9;&#x6CD5;&#x544A;&#x8BC9; CyclicBarrier &#x6211;&#x5DF2;&#x7ECF;&#x5230;&#x8FBE;&#x4E86;&#x5C4F;&#x969C;&#xFF0C;&#x7136;&#x540E;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x88AB;&#x963B;&#x585E;&#x3002;</p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CyclicBarrierDemo</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        cyclicBarrierTest();
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">cyclicBarrierTest</span><span class="hljs-params">()</span> </span>{
        CyclicBarrier cyclicBarrier = <span class="hljs-keyword">new</span> CyclicBarrier(<span class="hljs-number">7</span>, () -&gt; {
            System.out.println(<span class="hljs-string">&quot;====&#x53EC;&#x5524;&#x795E;&#x9F99;====&quot;</span>);
        });
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">7</span>; i++) {
            <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> tempInt = i;
            <span class="hljs-keyword">new</span> Thread(() -&gt; {
                System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x6536;&#x96C6;&#x5230;&#x7B2C;&quot;</span> + tempInt + <span class="hljs-string">&quot;&#x9897;&#x9F99;&#x73E0;&quot;</span>);
                <span class="hljs-keyword">try</span> {
                    cyclicBarrier.await();
                } <span class="hljs-keyword">catch</span> (InterruptedException e) {
                    e.printStackTrace();
                } <span class="hljs-keyword">catch</span> (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }, <span class="hljs-string">&quot;&quot;</span> + i).start();
        }
    }
}
</code></pre>
<p>&#x5F53;&#x8C03;&#x7528; <code>CyclicBarrier</code> &#x5BF9;&#x8C61;&#x8C03;&#x7528; <code>await()</code> &#x65B9;&#x6CD5;&#x65F6;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x8C03;&#x7528;&#x7684;&#x662F;<code>dowait(false, 0L)</code>&#x65B9;&#x6CD5;&#x3002; <code>await()</code> &#x65B9;&#x6CD5;&#x5C31;&#x50CF;&#x6811;&#x7ACB;&#x8D77;&#x4E00;&#x4E2A;&#x6805;&#x680F;&#x7684;&#x884C;&#x4E3A;&#x4E00;&#x6837;&#xFF0C;&#x5C06;&#x7EBF;&#x7A0B;&#x6321;&#x4F4F;&#x4E86;&#xFF0C;&#x5F53;&#x62E6;&#x4F4F;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x8FBE;&#x5230; parties &#x7684;&#x503C;&#x65F6;&#xFF0C;&#x6805;&#x680F;&#x624D;&#x4F1A;&#x6253;&#x5F00;&#xFF0C;&#x7EBF;&#x7A0B;&#x624D;&#x5F97;&#x4EE5;&#x901A;&#x8FC7;&#x6267;&#x884C;&#x3002;</p>
<pre><code class="lang-java">    <span class="hljs-comment">// &#x5F53;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x6216;&#x8005;&#x8BF7;&#x6C42;&#x6570;&#x91CF;&#x8FBE;&#x5230; count &#x65F6; await &#x4E4B;&#x540E;&#x7684;&#x65B9;&#x6CD5;&#x624D;&#x4F1A;&#x88AB;&#x6267;&#x884C;&#x3002;&#x4E0A;&#x9762;&#x7684;&#x793A;&#x4F8B;&#x4E2D; count &#x7684;&#x503C;&#x5C31;&#x4E3A; 5&#x3002;</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> count;
    <span class="hljs-comment">/**
     * Main barrier code, covering the various policies.
     */</span>
    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> <span class="hljs-title">dowait</span><span class="hljs-params">(<span class="hljs-keyword">boolean</span> timed, <span class="hljs-keyword">long</span> nanos)</span>
        <span class="hljs-keyword">throws</span> InterruptedException, BrokenBarrierException,
               TimeoutException </span>{
        <span class="hljs-keyword">final</span> ReentrantLock lock = <span class="hljs-keyword">this</span>.lock;
        <span class="hljs-comment">// &#x9501;&#x4F4F;</span>
        lock.lock();
        <span class="hljs-keyword">try</span> {
            <span class="hljs-keyword">final</span> Generation g = generation;

            <span class="hljs-keyword">if</span> (g.broken)
                <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> BrokenBarrierException();

            <span class="hljs-comment">// &#x5982;&#x679C;&#x7EBF;&#x7A0B;&#x4E2D;&#x65AD;&#x4E86;&#xFF0C;&#x629B;&#x51FA;&#x5F02;&#x5E38;</span>
            <span class="hljs-keyword">if</span> (Thread.interrupted()) {
                breakBarrier();
                <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> InterruptedException();
            }
            <span class="hljs-comment">// cout&#x51CF;1</span>
            <span class="hljs-keyword">int</span> index = --count;
            <span class="hljs-comment">// &#x5F53; count &#x6570;&#x91CF;&#x51CF;&#x4E3A; 0 &#x4E4B;&#x540E;&#x8BF4;&#x660E;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5DF2;&#x7ECF;&#x5230;&#x8FBE;&#x6805;&#x680F;&#x4E86;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8FBE;&#x5230;&#x4E86;&#x53EF;&#x4EE5;&#x6267;&#x884C;await &#x65B9;&#x6CD5;&#x4E4B;&#x540E;&#x7684;&#x6761;&#x4EF6;</span>
            <span class="hljs-keyword">if</span> (index == <span class="hljs-number">0</span>) {  <span class="hljs-comment">// tripped</span>
                <span class="hljs-keyword">boolean</span> ranAction = <span class="hljs-keyword">false</span>;
                <span class="hljs-keyword">try</span> {
                    <span class="hljs-keyword">final</span> Runnable command = barrierCommand;
                    <span class="hljs-keyword">if</span> (command != <span class="hljs-keyword">null</span>)
                        command.run();
                    ranAction = <span class="hljs-keyword">true</span>;
                    <span class="hljs-comment">// &#x5C06; count &#x91CD;&#x7F6E;&#x4E3A; parties &#x5C5E;&#x6027;&#x7684;&#x521D;&#x59CB;&#x5316;&#x503C;</span>
                    <span class="hljs-comment">// &#x5524;&#x9192;&#x4E4B;&#x524D;&#x7B49;&#x5F85;&#x7684;&#x7EBF;&#x7A0B;</span>
                    <span class="hljs-comment">// &#x4E0B;&#x4E00;&#x6CE2;&#x6267;&#x884C;&#x5F00;&#x59CB;</span>
                    nextGeneration();
                    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
                } <span class="hljs-keyword">finally</span> {
                    <span class="hljs-keyword">if</span> (!ranAction)
                        breakBarrier();
                }
            }

            <span class="hljs-comment">// loop until tripped, broken, interrupted, or timed out</span>
            <span class="hljs-keyword">for</span> (;;) {
                <span class="hljs-keyword">try</span> {
                    <span class="hljs-keyword">if</span> (!timed)
                        trip.await();
                    <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (nanos &gt; <span class="hljs-number">0L</span>)
                        nanos = trip.awaitNanos(nanos);
                } <span class="hljs-keyword">catch</span> (InterruptedException ie) {
                    <span class="hljs-keyword">if</span> (g == generation &amp;&amp; ! g.broken) {
                        breakBarrier();
                        <span class="hljs-keyword">throw</span> ie;
                    } <span class="hljs-keyword">else</span> {
                        <span class="hljs-comment">// We&apos;re about to finish waiting even if we had not</span>
                        <span class="hljs-comment">// been interrupted, so this interrupt is deemed to</span>
                        <span class="hljs-comment">// &quot;belong&quot; to subsequent execution.</span>
                        Thread.currentThread().interrupt();
                    }
                }

                <span class="hljs-keyword">if</span> (g.broken)
                    <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> BrokenBarrierException();

                <span class="hljs-keyword">if</span> (g != generation)
                    <span class="hljs-keyword">return</span> index;

                <span class="hljs-keyword">if</span> (timed &amp;&amp; nanos &lt;= <span class="hljs-number">0L</span>) {
                    breakBarrier();
                    <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> TimeoutException();
                }
            }
        } <span class="hljs-keyword">finally</span> {
            lock.unlock();
        }
    }
</code></pre>
<p>&#x603B;&#x7ED3;&#xFF1A;<code>CyclicBarrier</code> &#x5185;&#x90E8;&#x901A;&#x8FC7;&#x4E00;&#x4E2A; count &#x53D8;&#x91CF;&#x4F5C;&#x4E3A;&#x8BA1;&#x6570;&#x5668;&#xFF0C;cout &#x7684;&#x521D;&#x59CB;&#x503C;&#x4E3A; parties &#x5C5E;&#x6027;&#x7684;&#x521D;&#x59CB;&#x5316;&#x503C;&#xFF0C;&#x6BCF;&#x5F53;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5230;&#x4E86;&#x6805;&#x680F;&#x8FD9;&#x91CC;&#x4E86;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x5C06;&#x8BA1;&#x6570;&#x5668;&#x51CF;&#x4E00;&#x3002;&#x5982;&#x679C; count &#x503C;&#x4E3A; 0 &#x4E86;&#xFF0C;&#x8868;&#x793A;&#x8FD9;&#x662F;&#x8FD9;&#x4E00;&#x4EE3;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5230;&#x8FBE;&#x6805;&#x680F;&#xFF0C;&#x5C31;&#x5C1D;&#x8BD5;&#x6267;&#x884C;&#x6211;&#x4EEC;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x4E2D;&#x8F93;&#x5165;&#x7684;&#x4EFB;&#x52A1;&#x3002;</p>
<h4 id="semaphore"><a name="semaphore" class="anchor-navigation-ex-anchor" href="#semaphore"><i class="fa fa-link" aria-hidden="true"></i></a><a name="semaphore" class="plugin-anchor" href="#semaphore"><i class="fa fa-link" aria-hidden="true"></i></a>Semaphore</h4>
<p><strong>synchronized &#x548C; ReentrantLock &#x90FD;&#x662F;&#x4E00;&#x6B21;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x8BBF;&#x95EE;&#x67D0;&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;Semaphore(&#x4FE1;&#x53F7;&#x91CF;)&#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x540C;&#x65F6;&#x8BBF;&#x95EE;&#x67D0;&#x4E2A;&#x8D44;&#x6E90;&#x3002;</strong></p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SemaphoreDemo</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        Semaphore semaphore = <span class="hljs-keyword">new</span> Semaphore(<span class="hljs-number">3</span>);<span class="hljs-comment">// &#x6A21;&#x62DF;&#x4E09;&#x4E2A;&#x505C;&#x8F66;&#x4F4D;</span>
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">6</span>; i++) { <span class="hljs-comment">// &#x6A21;&#x62DF;6&#x90E8;&#x6C7D;&#x8F66;</span>
            <span class="hljs-keyword">new</span> Thread(() -&gt; {
                <span class="hljs-keyword">try</span> {
                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x62A2;&#x5230;&#x8F66;&#x4F4D;&quot;</span>);
                    <span class="hljs-comment">// &#x505C;&#x8F66;3s</span>
                    <span class="hljs-keyword">try</span> { TimeUnit.SECONDS.sleep(<span class="hljs-number">3</span>); } <span class="hljs-keyword">catch</span> (InterruptedException e) { e.printStackTrace(); }
                    System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x505C;&#x8F66;3s&#x540E;&#x79BB;&#x5F00;&#x8F66;&#x4F4D;&quot;</span>);
                } <span class="hljs-keyword">catch</span> (Exception e) {
                    e.printStackTrace();
                } <span class="hljs-keyword">finally</span> {
                    semaphore.release();
                }
            }, <span class="hljs-string">&quot;Car &quot;</span> + i).start();
        }
    }
}
</code></pre>
<h3 id="&#x963B;&#x585E;&#x961F;&#x5217;"><a name="&#x963B;&#x585E;&#x961F;&#x5217;" class="anchor-navigation-ex-anchor" href="#&#x963B;&#x585E;&#x961F;&#x5217;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x963B;&#x585E;&#x961F;&#x5217;" class="plugin-anchor" href="#&#x963B;&#x585E;&#x961F;&#x5217;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x963B;&#x585E;&#x961F;&#x5217;</h3>
<ul>
<li>ArrayBlockingQueue:&#x7531;&#x6570;&#x7EC4;&#x7ED3;&#x6784;&#x7EC4;&#x6210;&#x7684;&#x6709;&#x754C;&#x963B;&#x585E;&#x961F;&#x5217;.</li>
<li>LinkedBlockingQueue:&#x7531;&#x94FE;&#x8868;&#x7ED3;&#x6784;&#x7EC4;&#x6210;&#x7684;&#x6709;&#x754C;(&#x4F46;&#x5927;&#x5C0F;&#x9ED8;&#x8BA4;&#x503C;Integer&gt;MAX_VALUE)&#x963B;&#x585E;&#x961F;&#x5217;.</li>
<li>PriorityBlockingQueue:&#x652F;&#x6301;&#x4F18;&#x5148;&#x7EA7;&#x6392;&#x5E8F;&#x7684;&#x65E0;&#x754C;&#x963B;&#x585E;&#x961F;&#x5217;.</li>
<li>DelayQueue:&#x4F7F;&#x7528;&#x4F18;&#x5148;&#x7EA7;&#x961F;&#x5217;&#x5B9E;&#x73B0;&#x7684;&#x5EF6;&#x8FDF;&#x65E0;&#x754C;&#x963B;&#x585E;&#x961F;&#x5217;.</li>
<li>SynchronousQueue:&#x4E0D;&#x5B58;&#x50A8;&#x5143;&#x7D20;&#x7684;&#x963B;&#x585E;&#x961F;&#x5217;,&#x4E5F;&#x5373;&#x662F;&#x5355;&#x4E2A;&#x5143;&#x7D20;&#x7684;&#x961F;&#x5217;.</li>
<li>LinkedTransferQueue:&#x7531;&#x94FE;&#x8868;&#x7ED3;&#x6784;&#x7EC4;&#x6210;&#x7684;&#x65E0;&#x754C;&#x963B;&#x585E;&#x961F;&#x5217;.</li>
<li>LinkedBlockingDuque:&#x7531;&#x94FE;&#x8868;&#x7ED3;&#x6784;&#x7EC4;&#x6210;&#x7684;&#x53CC;&#x5411;&#x963B;&#x585E;&#x961F;&#x5217;.</li>
<li>&#x629B;&#x51FA;&#x5F02;&#x5E38;&#x65B9;&#x6CD5;&#xFF1A;add remove</li>
<li>&#x4E0D;&#x629B;&#x5F02;&#x5E38;&#xFF1A;offer poll</li>
<li>&#x963B;&#x585E; put take</li>
<li>&#x5E26;&#x65F6;&#x95F4; offer poll</li>
</ul>
<h4 id="&#x751F;&#x4EA7;&#x8005;&#x6D88;&#x8D39;&#x8005;"><a name="&#x751F;&#x4EA7;&#x8005;&#x6D88;&#x8D39;&#x8005;" class="anchor-navigation-ex-anchor" href="#&#x751F;&#x4EA7;&#x8005;&#x6D88;&#x8D39;&#x8005;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x751F;&#x4EA7;&#x8005;&#x6D88;&#x8D39;&#x8005;" class="plugin-anchor" href="#&#x751F;&#x4EA7;&#x8005;&#x6D88;&#x8D39;&#x8005;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x751F;&#x4EA7;&#x8005;&#x6D88;&#x8D39;&#x8005;</h4>
<p>synchronized&#x7248;&#x672C;&#x7684;&#x751F;&#x4EA7;&#x8005;&#x548C;&#x6D88;&#x8D39;&#x8005;&#xFF0C;&#x6BD4;&#x8F83;&#x7E41;&#x7410;</p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ProdConsumerSynchronized</span> </span>{

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> LinkedList&lt;String&gt; lists = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">synchronized</span> <span class="hljs-keyword">void</span> <span class="hljs-title">put</span><span class="hljs-params">(String s)</span> </span>{
        <span class="hljs-keyword">while</span> (lists.size() != <span class="hljs-number">0</span>) { <span class="hljs-comment">// &#x7528;while&#x6015;&#x6709;&#x5B58;&#x5728;&#x865A;&#x62DF;&#x5524;&#x9192;&#x7EBF;&#x7A0B;</span>
            <span class="hljs-comment">// &#x6EE1;&#x4E86;&#xFF0C; &#x4E0D;&#x751F;&#x4EA7;&#x4E86;</span>
            <span class="hljs-keyword">try</span> {
                <span class="hljs-keyword">this</span>.wait();
            } <span class="hljs-keyword">catch</span> (InterruptedException e) {
                e.printStackTrace();
            }
        }
        lists.add(s);
        System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &quot;</span> + lists.peekFirst());
        <span class="hljs-keyword">this</span>.notifyAll(); <span class="hljs-comment">// &#x8FD9;&#x91CC;&#x53EF;&#x662F;&#x901A;&#x77E5;&#x6240;&#x6709;&#x88AB;&#x6302;&#x8D77;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x5305;&#x62EC;&#x5176;&#x4ED6;&#x7684;&#x751F;&#x4EA7;&#x8005;&#x7EBF;&#x7A0B;</span>
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">synchronized</span> <span class="hljs-keyword">void</span> <span class="hljs-title">get</span><span class="hljs-params">()</span> </span>{
        <span class="hljs-keyword">while</span> (lists.size() == <span class="hljs-number">0</span>) {
            <span class="hljs-keyword">try</span> {
                <span class="hljs-keyword">this</span>.wait();
            } <span class="hljs-keyword">catch</span> (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &quot;</span> + lists.removeFirst());
        <span class="hljs-keyword">this</span>.notifyAll(); <span class="hljs-comment">// &#x901A;&#x77E5;&#x6240;&#x6709;&#x88AB;wait&#x6302;&#x8D77;&#x7684;&#x7EBF;&#x7A0B;  &#x7528;notify&#x53EF;&#x80FD;&#x5C31;&#x6B7B;&#x9501;&#x4E86;&#x3002;</span>
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        ProdConsumerSynchronized prodConsumerSynchronized = <span class="hljs-keyword">new</span> ProdConsumerSynchronized();

        <span class="hljs-comment">// &#x542F;&#x52A8;&#x6D88;&#x8D39;&#x8005;&#x7EBF;&#x7A0B;</span>
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">5</span>; i++) {
            <span class="hljs-keyword">new</span> Thread(prodConsumerSynchronized::get, <span class="hljs-string">&quot;ConsA&quot;</span> + i).start();
        }

        <span class="hljs-comment">// &#x542F;&#x52A8;&#x751F;&#x4EA7;&#x8005;&#x7EBF;&#x7A0B;</span>
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">5</span>; i++) {
            <span class="hljs-keyword">int</span> tempI = i;
            <span class="hljs-keyword">new</span> Thread(() -&gt; {
                prodConsumerSynchronized.put(<span class="hljs-string">&quot;&quot;</span> + tempI);
            }, <span class="hljs-string">&quot;ProdA&quot;</span> + i).start();
        }
    }
}
</code></pre>
<p>ReentrantLock</p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ProdConsumerReentrantLock</span> </span>{

    <span class="hljs-keyword">private</span> LinkedList&lt;String&gt; lists = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();

    <span class="hljs-keyword">private</span> Lock lock = <span class="hljs-keyword">new</span> ReentrantLock();

    <span class="hljs-keyword">private</span> Condition prod = lock.newCondition();

    <span class="hljs-keyword">private</span> Condition cons = lock.newCondition();

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">put</span><span class="hljs-params">(String s)</span> </span>{
        lock.lock();
        <span class="hljs-keyword">try</span> {
            <span class="hljs-comment">// 1. &#x5224;&#x65AD;</span>
            <span class="hljs-keyword">while</span> (lists.size() != <span class="hljs-number">0</span>) {
                <span class="hljs-comment">// &#x7B49;&#x5F85;&#x4E0D;&#x80FD;&#x751F;&#x4EA7;</span>
                prod.await();
            }
            <span class="hljs-comment">// 2.&#x5E72;&#x6D3B;</span>
            lists.add(s);
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &quot;</span> + lists.peekFirst());
            <span class="hljs-comment">// 3. &#x901A;&#x77E5;</span>
            cons.signalAll();
        } <span class="hljs-keyword">catch</span> (Exception e) {
            e.printStackTrace();
        } <span class="hljs-keyword">finally</span> {
            lock.unlock();
        }
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">get</span><span class="hljs-params">()</span> </span>{
        lock.lock();
        <span class="hljs-keyword">try</span> {
            <span class="hljs-comment">// 1. &#x5224;&#x65AD;</span>
            <span class="hljs-keyword">while</span> (lists.size() == <span class="hljs-number">0</span>) {
                <span class="hljs-comment">// &#x7B49;&#x5F85;&#x4E0D;&#x80FD;&#x6D88;&#x8D39;</span>
                cons.await();
            }
            <span class="hljs-comment">// 2.&#x5E72;&#x6D3B;</span>
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &quot;</span> + lists.removeFirst());
            <span class="hljs-comment">// 3. &#x901A;&#x77E5;</span>
            prod.signalAll();
        } <span class="hljs-keyword">catch</span> (Exception e) {
            e.printStackTrace();
        } <span class="hljs-keyword">finally</span> {
            lock.unlock();
        }
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        ProdConsumerReentrantLock prodConsumerReentrantLock = <span class="hljs-keyword">new</span> ProdConsumerReentrantLock();
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">5</span>; i++) {
            <span class="hljs-keyword">int</span> tempI = i;
            <span class="hljs-keyword">new</span> Thread(() -&gt; {
                prodConsumerReentrantLock.put(tempI + <span class="hljs-string">&quot;&quot;</span>);
            }, <span class="hljs-string">&quot;ProdA&quot;</span> + i).start();
        }
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">5</span>; i++) {
            <span class="hljs-keyword">new</span> Thread(prodConsumerReentrantLock::get, <span class="hljs-string">&quot;ConsA&quot;</span> + i).start();
        }
    }
}
</code></pre>
<p>BlockingQueue</p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ProdConsumerBlockingQueue</span> </span>{

    <span class="hljs-keyword">private</span> <span class="hljs-keyword">volatile</span> <span class="hljs-keyword">boolean</span> flag = <span class="hljs-keyword">true</span>;

    <span class="hljs-keyword">private</span> AtomicInteger atomicInteger = <span class="hljs-keyword">new</span> AtomicInteger();

    BlockingQueue&lt;String&gt; blockingQueue = <span class="hljs-keyword">null</span>;

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">ProdConsumerBlockingQueue</span><span class="hljs-params">(BlockingQueue&lt;String&gt; blockingQueue)</span> </span>{
        <span class="hljs-keyword">this</span>.blockingQueue = blockingQueue;
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">myProd</span><span class="hljs-params">()</span> <span class="hljs-keyword">throws</span> Exception </span>{
        String data = <span class="hljs-keyword">null</span>;
        <span class="hljs-keyword">boolean</span> retValue;
        <span class="hljs-keyword">while</span> (flag) {
            data = atomicInteger.incrementAndGet() + <span class="hljs-string">&quot;&quot;</span>;
            retValue = blockingQueue.offer(data, <span class="hljs-number">2</span>, TimeUnit.SECONDS);
            <span class="hljs-keyword">if</span> (retValue) {
                System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x63D2;&#x5165;&#x961F;&#x5217;&quot;</span> + data + <span class="hljs-string">&quot; &#x6210;&#x529F;&quot;</span>);
            } <span class="hljs-keyword">else</span> {
                System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x63D2;&#x5165;&#x961F;&#x5217;&quot;</span> + data + <span class="hljs-string">&quot; &#x5931;&#x8D25;&quot;</span>);
            }
            TimeUnit.SECONDS.sleep(<span class="hljs-number">1</span>);
        }
        System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x5927;&#x8001;&#x677F;&#x53EB;&#x505C;&#x4E86;&#xFF0C;flag=false&#xFF0C;&#x751F;&#x4EA7;&#x7ED3;&#x675F;&quot;</span>);
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">myConsumer</span><span class="hljs-params">()</span> <span class="hljs-keyword">throws</span> Exception </span>{
        String result = <span class="hljs-keyword">null</span>;
        <span class="hljs-keyword">while</span> (flag) {
            result = blockingQueue.poll(<span class="hljs-number">2</span>, TimeUnit.SECONDS);
            <span class="hljs-keyword">if</span> (<span class="hljs-keyword">null</span> == result || result.equalsIgnoreCase(<span class="hljs-string">&quot;&quot;</span>)) {
                flag = <span class="hljs-keyword">false</span>;
                System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x8D85;&#x8FC7;2s&#x6CA1;&#x6709;&#x53D6;&#x5230;&#x86CB;&#x7CD5;&#xFF0C;&#x6D88;&#x8D39;&#x9000;&#x51FA;&quot;</span>);
                <span class="hljs-keyword">return</span>;
            }
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x6D88;&#x8D39;&#x961F;&#x5217;&quot;</span> + result + <span class="hljs-string">&quot;&#x6210;&#x529F;&quot;</span>);
        }
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">stop</span><span class="hljs-params">()</span> </span>{
        flag = <span class="hljs-keyword">false</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        ProdConsumerBlockingQueue prodConsumerBlockingQueue = <span class="hljs-keyword">new</span> ProdConsumerBlockingQueue(<span class="hljs-keyword">new</span> ArrayBlockingQueue&lt;&gt;(<span class="hljs-number">10</span>));
        <span class="hljs-keyword">new</span> Thread(() -&gt; {
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x751F;&#x4EA7;&#x7EBF;&#x7A0B;&#x542F;&#x52A8;&quot;</span>);
            <span class="hljs-keyword">try</span> {
                prodConsumerBlockingQueue.myProd();
            } <span class="hljs-keyword">catch</span> (Exception e) {
                e.printStackTrace();
            }
        }, <span class="hljs-string">&quot;Prod&quot;</span>).start();

        <span class="hljs-keyword">new</span> Thread(() -&gt; {
            System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot; &#x6D88;&#x8D39;&#x7EBF;&#x7A0B;&#x542F;&#x52A8;&quot;</span>);
            <span class="hljs-keyword">try</span> {
                prodConsumerBlockingQueue.myConsumer();
            } <span class="hljs-keyword">catch</span> (Exception e) {
                e.printStackTrace();
            }
        }, <span class="hljs-string">&quot;Consumer&quot;</span>).start();

        <span class="hljs-keyword">try</span> { TimeUnit.SECONDS.sleep(<span class="hljs-number">5</span>); } <span class="hljs-keyword">catch</span> (InterruptedException e) { e.printStackTrace(); }
        System.out.println(<span class="hljs-string">&quot;5s&#x540E;main&#x53EB;&#x505C;&#xFF0C;&#x7EBF;&#x7A0B;&#x7ED3;&#x675F;&quot;</span>);
        prodConsumerBlockingQueue.stop();
    }
}
</code></pre>
<h3 id="&#x7EBF;&#x7A0B;&#x6C60;"><a name="&#x7EBF;&#x7A0B;&#x6C60;" class="anchor-navigation-ex-anchor" href="#&#x7EBF;&#x7A0B;&#x6C60;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x7EBF;&#x7A0B;&#x6C60;" class="plugin-anchor" href="#&#x7EBF;&#x7A0B;&#x6C60;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x7EBF;&#x7A0B;&#x6C60;</h3>
<h4 id="&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x597D;&#x5904;"><a name="&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x597D;&#x5904;" class="anchor-navigation-ex-anchor" href="#&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x597D;&#x5904;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x597D;&#x5904;" class="plugin-anchor" href="#&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x597D;&#x5904;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x597D;&#x5904;</h4>
<ul>
<li><strong>&#x964D;&#x4F4E;&#x8D44;&#x6E90;&#x6D88;&#x8017;</strong>&#x3002;&#x901A;&#x8FC7;&#x91CD;&#x590D;&#x5229;&#x7528;&#x5DF2;&#x521B;&#x5EFA;&#x7684;&#x7EBF;&#x7A0B;&#x964D;&#x4F4E;&#x7EBF;&#x7A0B;&#x521B;&#x5EFA;&#x548C;&#x9500;&#x6BC1;&#x9020;&#x6210;&#x7684;&#x6D88;&#x8017;&#x3002;</li>
<li><strong>&#x63D0;&#x9AD8;&#x54CD;&#x5E94;&#x901F;&#x5EA6;</strong>&#x3002;&#x5F53;&#x4EFB;&#x52A1;&#x5230;&#x8FBE;&#x65F6;&#xFF0C;&#x4EFB;&#x52A1;&#x53EF;&#x4EE5;&#x4E0D;&#x9700;&#x8981;&#x7684;&#x7B49;&#x5230;&#x7EBF;&#x7A0B;&#x521B;&#x5EFA;&#x5C31;&#x80FD;&#x7ACB;&#x5373;&#x6267;&#x884C;&#x3002;</li>
<li><strong>&#x63D0;&#x9AD8;&#x7EBF;&#x7A0B;&#x7684;&#x53EF;&#x7BA1;&#x7406;&#x6027;</strong>&#x3002;&#x7EBF;&#x7A0B;&#x662F;&#x7A00;&#x7F3A;&#x8D44;&#x6E90;&#xFF0C;&#x5982;&#x679C;&#x65E0;&#x9650;&#x5236;&#x7684;&#x521B;&#x5EFA;&#xFF0C;&#x4E0D;&#x4EC5;&#x4F1A;&#x6D88;&#x8017;&#x7CFB;&#x7EDF;&#x8D44;&#x6E90;&#xFF0C;&#x8FD8;&#x4F1A;&#x964D;&#x4F4E;&#x7CFB;&#x7EDF;&#x7684;&#x7A33;&#x5B9A;&#x6027;&#xFF0C;&#x4F7F;&#x7528;&#x7EBF;&#x7A0B;&#x6C60;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x7EDF;&#x4E00;&#x7684;&#x5206;&#x914D;&#xFF0C;&#x8C03;&#x4F18;&#x548C;&#x76D1;&#x63A7;&#x3002;</li>
</ul>
<h4 id="fixedthreadpool"><a name="fixedthreadpool" class="anchor-navigation-ex-anchor" href="#fixedthreadpool"><i class="fa fa-link" aria-hidden="true"></i></a><a name="fixedthreadpool" class="plugin-anchor" href="#fixedthreadpool"><i class="fa fa-link" aria-hidden="true"></i></a>FixedThreadPool</h4>
<p><code>FixedThreadPool</code> &#x88AB;&#x79F0;&#x4E3A;&#x53EF;&#x91CD;&#x7528;&#x56FA;&#x5B9A;&#x7EBF;&#x7A0B;&#x6570;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#x3002;&#x901A;&#x8FC7; Executors &#x7C7B;&#x4E2D;&#x7684;&#x76F8;&#x5173;&#x6E90;&#x4EE3;&#x7801;&#x6765;&#x770B;&#x4E00;&#x4E0B;&#x76F8;&#x5173;&#x5B9E;&#x73B0;&#xFF1A;</p>
<pre><code class="lang-java">   <span class="hljs-comment">/**
     * &#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x53EF;&#x91CD;&#x7528;&#x56FA;&#x5B9A;&#x6570;&#x91CF;&#x7EBF;&#x7A0B;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;
     */</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> ExecutorService <span class="hljs-title">newFixedThreadPool</span><span class="hljs-params">(<span class="hljs-keyword">int</span> nThreads, ThreadFactory threadFactory)</span> </span>{
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> ThreadPoolExecutor(nThreads, nThreads,
                                      <span class="hljs-number">0L</span>, TimeUnit.MILLISECONDS,
                                      <span class="hljs-keyword">new</span> LinkedBlockingQueue&lt;Runnable&gt;(),
                                      threadFactory);
    }
</code></pre>
<p><strong>&#x4ECE;&#x4E0A;&#x9762;&#x6E90;&#x4EE3;&#x7801;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#x65B0;&#x521B;&#x5EFA;&#x7684; <code>FixedThreadPool</code> &#x7684; <code>corePoolSize</code> &#x548C; <code>maximumPoolSize</code> &#x90FD;&#x88AB;&#x8BBE;&#x7F6E;&#x4E3A; nThreads&#xFF0C;&#x8FD9;&#x4E2A; nThreads &#x53C2;&#x6570;&#x662F;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x7684;&#x65F6;&#x5019;&#x81EA;&#x5DF1;&#x4F20;&#x9012;&#x7684;&#x3002;</strong></p>
<ol>
<li>&#x5982;&#x679C;&#x5F53;&#x524D;&#x8FD0;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x5C0F;&#x4E8E; corePoolSize&#xFF0C; &#x5982;&#x679C;&#x518D;&#x6765;&#x65B0;&#x4EFB;&#x52A1;&#x7684;&#x8BDD;&#xFF0C;&#x5C31;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x7EBF;&#x7A0B;&#x6765;&#x6267;&#x884C;&#x4EFB;&#x52A1;&#xFF1B;</li>
<li>&#x5F53;&#x524D;&#x8FD0;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x7B49;&#x4E8E; corePoolSize &#x540E;&#xFF0C; &#x5982;&#x679C;&#x518D;&#x6765;&#x65B0;&#x4EFB;&#x52A1;&#x7684;&#x8BDD;&#xFF0C;&#x4F1A;&#x5C06;&#x4EFB;&#x52A1;&#x52A0;&#x5165; <code>LinkedBlockingQueue</code>&#xFF1B;</li>
<li>&#x7EBF;&#x7A0B;&#x6C60;&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x5B8C; &#x624B;&#x5934;&#x7684;&#x4EFB;&#x52A1;&#x540E;&#xFF0C;&#x4F1A;&#x5728;&#x5FAA;&#x73AF;&#x4E2D;&#x53CD;&#x590D;&#x4ECE; <code>LinkedBlockingQueue</code> &#x4E2D;&#x83B7;&#x53D6;&#x4EFB;&#x52A1;&#x6765;&#x6267;&#x884C;&#xFF1B;</li>
</ol>
<p>&#x4E0D;&#x63A8;&#x8350;&#x4F7F;&#x7528;</p>
<p><strong><code>FixedThreadPool</code> &#x4F7F;&#x7528;&#x65E0;&#x754C;&#x961F;&#x5217; <code>LinkedBlockingQueue</code>&#xFF08;&#x961F;&#x5217;&#x7684;&#x5BB9;&#x91CF;&#x4E3A; Intger.MAX_VALUE&#xFF09;&#x4F5C;&#x4E3A;&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x5DE5;&#x4F5C;&#x961F;&#x5217;&#x4F1A;&#x5BF9;&#x7EBF;&#x7A0B;&#x6C60;&#x5E26;&#x6765;&#x5982;&#x4E0B;&#x5F71;&#x54CD; &#xFF1A;</strong></p>
<ol>
<li>&#x5F53;&#x7EBF;&#x7A0B;&#x6C60;&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x8FBE;&#x5230; <code>corePoolSize</code> &#x540E;&#xFF0C;&#x65B0;&#x4EFB;&#x52A1;&#x5C06;&#x5728;&#x65E0;&#x754C;&#x961F;&#x5217;&#x4E2D;&#x7B49;&#x5F85;&#xFF0C;&#x56E0;&#x6B64;&#x7EBF;&#x7A0B;&#x6C60;&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x4E0D;&#x4F1A;&#x8D85;&#x8FC7; corePoolSize&#xFF1B;</li>
<li>&#x7531;&#x4E8E;&#x4F7F;&#x7528;&#x65E0;&#x754C;&#x961F;&#x5217;&#x65F6; <code>maximumPoolSize</code> &#x5C06;&#x662F;&#x4E00;&#x4E2A;&#x65E0;&#x6548;&#x53C2;&#x6570;&#xFF0C;&#x56E0;&#x4E3A;&#x4E0D;&#x53EF;&#x80FD;&#x5B58;&#x5728;&#x4EFB;&#x52A1;&#x961F;&#x5217;&#x6EE1;&#x7684;&#x60C5;&#x51B5;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x901A;&#x8FC7;&#x521B;&#x5EFA; <code>FixedThreadPool</code>&#x7684;&#x6E90;&#x7801;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#x521B;&#x5EFA;&#x7684; <code>FixedThreadPool</code> &#x7684; <code>corePoolSize</code> &#x548C; <code>maximumPoolSize</code> &#x88AB;&#x8BBE;&#x7F6E;&#x4E3A;&#x540C;&#x4E00;&#x4E2A;&#x503C;&#x3002;</li>
<li>&#x7531;&#x4E8E; 1 &#x548C; 2&#xFF0C;&#x4F7F;&#x7528;&#x65E0;&#x754C;&#x961F;&#x5217;&#x65F6; <code>keepAliveTime</code> &#x5C06;&#x662F;&#x4E00;&#x4E2A;&#x65E0;&#x6548;&#x53C2;&#x6570;&#xFF1B;</li>
<li>&#x8FD0;&#x884C;&#x4E2D;&#x7684; <code>FixedThreadPool</code>&#xFF08;&#x672A;&#x6267;&#x884C; <code>shutdown()</code>&#x6216; <code>shutdownNow()</code>&#xFF09;&#x4E0D;&#x4F1A;&#x62D2;&#x7EDD;&#x4EFB;&#x52A1;&#xFF0C;&#x5728;&#x4EFB;&#x52A1;&#x6BD4;&#x8F83;&#x591A;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x5BFC;&#x81F4; OOM&#xFF08;&#x5185;&#x5B58;&#x6EA2;&#x51FA;&#xFF09;&#x3002;</li>
</ol>
<h4 id="singlethreadexecutor"><a name="singlethreadexecutor" class="anchor-navigation-ex-anchor" href="#singlethreadexecutor"><i class="fa fa-link" aria-hidden="true"></i></a><a name="singlethreadexecutor" class="plugin-anchor" href="#singlethreadexecutor"><i class="fa fa-link" aria-hidden="true"></i></a>SingleThreadExecutor</h4>
<pre><code class="lang-java">   <span class="hljs-comment">/**
     *&#x8FD4;&#x56DE;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;
     */</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> ExecutorService <span class="hljs-title">newSingleThreadExecutor</span><span class="hljs-params">(ThreadFactory threadFactory)</span> </span>{
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> FinalizableDelegatedExecutorService
            (<span class="hljs-keyword">new</span> ThreadPoolExecutor(<span class="hljs-number">1</span>, <span class="hljs-number">1</span>,
                                    <span class="hljs-number">0L</span>, TimeUnit.MILLISECONDS,
                                    <span class="hljs-keyword">new</span> LinkedBlockingQueue&lt;Runnable&gt;(),
                                    threadFactory));
    }
</code></pre>
<p>&#x548C;&#x4E0A;&#x9762;&#x4E00;&#x4E2A;&#x5DEE;&#x4E0D;&#x591A;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;core&#x548C;max&#x90FD;&#x88AB;&#x8BBE;&#x7F6E;&#x4E3A;1</p>
<h4 id="cachedthreadpool"><a name="cachedthreadpool" class="anchor-navigation-ex-anchor" href="#cachedthreadpool"><i class="fa fa-link" aria-hidden="true"></i></a><a name="cachedthreadpool" class="plugin-anchor" href="#cachedthreadpool"><i class="fa fa-link" aria-hidden="true"></i></a>CachedThreadPool</h4>
<pre><code class="lang-java">    <span class="hljs-comment">/**
     * &#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6C60;&#xFF0C;&#x6839;&#x636E;&#x9700;&#x8981;&#x521B;&#x5EFA;&#x65B0;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F46;&#x4F1A;&#x5728;&#x5148;&#x524D;&#x6784;&#x5EFA;&#x7684;&#x7EBF;&#x7A0B;&#x53EF;&#x7528;&#x65F6;&#x91CD;&#x7528;&#x5B83;&#x3002;
     */</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> ExecutorService <span class="hljs-title">newCachedThreadPool</span><span class="hljs-params">(ThreadFactory threadFactory)</span> </span>{
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> ThreadPoolExecutor(<span class="hljs-number">0</span>, Integer.MAX_VALUE,
                                      <span class="hljs-number">60L</span>, TimeUnit.SECONDS,
                                      <span class="hljs-keyword">new</span> SynchronousQueue&lt;Runnable&gt;(),
                                      threadFactory);
    }
</code></pre>
<p><code>CachedThreadPool</code> &#x7684;<code>corePoolSize</code> &#x88AB;&#x8BBE;&#x7F6E;&#x4E3A;&#x7A7A;&#xFF08;0&#xFF09;&#xFF0C;<code>maximumPoolSize</code>&#x88AB;&#x8BBE;&#x7F6E;&#x4E3A; Integer.MAX.VALUE&#xFF0C;&#x5373;&#x5B83;&#x662F;&#x65E0;&#x754C;&#x7684;&#xFF0C;&#x8FD9;&#x4E5F;&#x5C31;&#x610F;&#x5473;&#x7740;&#x5982;&#x679C;&#x4E3B;&#x7EBF;&#x7A0B;&#x63D0;&#x4EA4;&#x4EFB;&#x52A1;&#x7684;&#x901F;&#x5EA6;&#x9AD8;&#x4E8E; <code>maximumPool</code> &#x4E2D;&#x7EBF;&#x7A0B;&#x5904;&#x7406;&#x4EFB;&#x52A1;&#x7684;&#x901F;&#x5EA6;&#x65F6;&#xFF0C;<code>CachedThreadPool</code> &#x4F1A;&#x4E0D;&#x65AD;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x7EBF;&#x7A0B;&#x3002;&#x6781;&#x7AEF;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x8FD9;&#x6837;&#x4F1A;&#x5BFC;&#x81F4;&#x8017;&#x5C3D; cpu &#x548C;&#x5185;&#x5B58;&#x8D44;&#x6E90;&#x3002;</p>
<ol>
<li>&#x9996;&#x5148;&#x6267;&#x884C; <code>SynchronousQueue.offer(Runnable task)</code> &#x63D0;&#x4EA4;&#x4EFB;&#x52A1;&#x5230;&#x4EFB;&#x52A1;&#x961F;&#x5217;&#x3002;&#x5982;&#x679C;&#x5F53;&#x524D; <code>maximumPool</code> &#x4E2D;&#x6709;&#x95F2;&#x7EBF;&#x7A0B;&#x6B63;&#x5728;&#x6267;&#x884C; <code>SynchronousQueue.poll(keepAliveTime,TimeUnit.NANOSECONDS)</code>&#xFF0C;&#x90A3;&#x4E48;&#x4E3B;&#x7EBF;&#x7A0B;&#x6267;&#x884C; offer &#x64CD;&#x4F5C;&#x4E0E;&#x7A7A;&#x95F2;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x7684; <code>poll</code> &#x64CD;&#x4F5C;&#x914D;&#x5BF9;&#x6210;&#x529F;&#xFF0C;&#x4E3B;&#x7EBF;&#x7A0B;&#x628A;&#x4EFB;&#x52A1;&#x4EA4;&#x7ED9;&#x7A7A;&#x95F2;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#xFF0C;<code>execute()</code>&#x65B9;&#x6CD5;&#x6267;&#x884C;&#x5B8C;&#x6210;&#xFF0C;&#x5426;&#x5219;&#x6267;&#x884C;&#x4E0B;&#x9762;&#x7684;&#x6B65;&#x9AA4; 2&#xFF1B;</li>
<li>&#x5F53;&#x521D;&#x59CB; <code>maximumPool</code> &#x4E3A;&#x7A7A;&#xFF0C;&#x6216;&#x8005; <code>maximumPool</code> &#x4E2D;&#x6CA1;&#x6709;&#x7A7A;&#x95F2;&#x7EBF;&#x7A0B;&#x65F6;&#xFF0C;&#x5C06;&#x6CA1;&#x6709;&#x7EBF;&#x7A0B;&#x6267;&#x884C; <code>SynchronousQueue.poll(keepAliveTime,TimeUnit.NANOSECONDS)</code>&#x3002;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x6B65;&#x9AA4; 1 &#x5C06;&#x5931;&#x8D25;&#xFF0C;&#x6B64;&#x65F6; <code>CachedThreadPool</code> &#x4F1A;&#x521B;&#x5EFA;&#x65B0;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x4EFB;&#x52A1;&#xFF0C;execute &#x65B9;&#x6CD5;&#x6267;&#x884C;&#x5B8C;&#x6210;&#xFF1B;</li>
</ol>
<h4 id="scheduledthreadpoolexecutor&#x7701;&#x7565;&#xFF0C;&#x57FA;&#x672C;&#x4E0D;&#x4F1A;&#x7528;"><a name="scheduledthreadpoolexecutor&#x7701;&#x7565;&#xFF0C;&#x57FA;&#x672C;&#x4E0D;&#x4F1A;&#x7528;" class="anchor-navigation-ex-anchor" href="#scheduledthreadpoolexecutor&#x7701;&#x7565;&#xFF0C;&#x57FA;&#x672C;&#x4E0D;&#x4F1A;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="scheduledthreadpoolexecutor&#x7701;&#x7565;&#xFF0C;&#x57FA;&#x672C;&#x4E0D;&#x4F1A;&#x7528;" class="plugin-anchor" href="#scheduledthreadpoolexecutor&#x7701;&#x7565;&#xFF0C;&#x57FA;&#x672C;&#x4E0D;&#x4F1A;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a>ScheduledThreadPoolExecutor&#x7701;&#x7565;&#xFF0C;&#x57FA;&#x672C;&#x4E0D;&#x4F1A;&#x7528;</h4>
<h4 id="threadpoolexecutor&#xFF08;&#x91CD;&#x70B9;&#xFF09;"><a name="threadpoolexecutor&#xFF08;&#x91CD;&#x70B9;&#xFF09;" class="anchor-navigation-ex-anchor" href="#threadpoolexecutor&#xFF08;&#x91CD;&#x70B9;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="threadpoolexecutor&#xFF08;&#x91CD;&#x70B9;&#xFF09;" class="plugin-anchor" href="#threadpoolexecutor&#xFF08;&#x91CD;&#x70B9;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>ThreadPoolExecutor&#xFF08;&#x91CD;&#x70B9;&#xFF09;</h4>
<pre><code class="lang-java">    <span class="hljs-comment">/**
     * &#x7528;&#x7ED9;&#x5B9A;&#x7684;&#x521D;&#x59CB;&#x53C2;&#x6570;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;ThreadPoolExecutor&#x3002;
     */</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">ThreadPoolExecutor</span><span class="hljs-params">(<span class="hljs-keyword">int</span> corePoolSize,//&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x6838;&#x5FC3;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;
                              <span class="hljs-keyword">int</span> maximumPoolSize,//&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;
                              <span class="hljs-keyword">long</span> keepAliveTime,//&#x5F53;&#x7EBF;&#x7A0B;&#x6570;&#x5927;&#x4E8E;&#x6838;&#x5FC3;&#x7EBF;&#x7A0B;&#x6570;&#x65F6;&#xFF0C;&#x591A;&#x4F59;&#x7684;&#x7A7A;&#x95F2;&#x7EBF;&#x7A0B;&#x5B58;&#x6D3B;&#x7684;&#x6700;&#x957F;&#x65F6;&#x95F4;
                              TimeUnit unit,//&#x65F6;&#x95F4;&#x5355;&#x4F4D;
                              BlockingQueue&lt;Runnable&gt; workQueue,//&#x4EFB;&#x52A1;&#x961F;&#x5217;&#xFF0C;&#x7528;&#x6765;&#x50A8;&#x5B58;&#x7B49;&#x5F85;&#x6267;&#x884C;&#x4EFB;&#x52A1;&#x7684;&#x961F;&#x5217;
                              ThreadFactory threadFactory,//&#x7EBF;&#x7A0B;&#x5DE5;&#x5382;&#xFF0C;&#x7528;&#x6765;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#xFF0C;&#x4E00;&#x822C;&#x9ED8;&#x8BA4;&#x5373;&#x53EF;
                              RejectedExecutionHandler handler//&#x62D2;&#x7EDD;&#x7B56;&#x7565;&#xFF0C;&#x5F53;&#x63D0;&#x4EA4;&#x7684;&#x4EFB;&#x52A1;&#x8FC7;&#x591A;&#x800C;&#x4E0D;&#x80FD;&#x53CA;&#x65F6;&#x5904;&#x7406;&#x65F6;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5B9A;&#x5236;&#x7B56;&#x7565;&#x6765;&#x5904;&#x7406;&#x4EFB;&#x52A1;
                               )</span> </span>{
        <span class="hljs-keyword">if</span> (corePoolSize &lt; <span class="hljs-number">0</span> ||
            maximumPoolSize &lt;= <span class="hljs-number">0</span> ||
            maximumPoolSize &lt; corePoolSize ||
            keepAliveTime &lt; <span class="hljs-number">0</span>)
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> IllegalArgumentException();
        <span class="hljs-keyword">if</span> (workQueue == <span class="hljs-keyword">null</span> || threadFactory == <span class="hljs-keyword">null</span> || handler == <span class="hljs-keyword">null</span>)
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> NullPointerException();
        <span class="hljs-keyword">this</span>.corePoolSize = corePoolSize;
        <span class="hljs-keyword">this</span>.maximumPoolSize = maximumPoolSize;
        <span class="hljs-keyword">this</span>.workQueue = workQueue;
        <span class="hljs-keyword">this</span>.keepAliveTime = unit.toNanos(keepAliveTime);
        <span class="hljs-keyword">this</span>.threadFactory = threadFactory;
        <span class="hljs-keyword">this</span>.handler = handler;
    }
</code></pre>
<p><strong><code>ThreadPoolExecutor</code> 3 &#x4E2A;&#x6700;&#x91CD;&#x8981;&#x7684;&#x53C2;&#x6570;&#xFF1A;</strong></p>
<ul>
<li><strong><code>corePoolSize</code> :</strong> &#x6838;&#x5FC3;&#x7EBF;&#x7A0B;&#x6570;&#x7EBF;&#x7A0B;&#x6570;&#x5B9A;&#x4E49;&#x4E86;&#x6700;&#x5C0F;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x8FD0;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x3002;</li>
<li><strong><code>maximumPoolSize</code> :</strong> &#x5F53;&#x961F;&#x5217;&#x4E2D;&#x5B58;&#x653E;&#x7684;&#x4EFB;&#x52A1;&#x8FBE;&#x5230;&#x961F;&#x5217;&#x5BB9;&#x91CF;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5F53;&#x524D;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x8FD0;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x53D8;&#x4E3A;&#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#x3002;</li>
<li><strong><code>workQueue</code>:</strong> &#x5F53;&#x65B0;&#x4EFB;&#x52A1;&#x6765;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x5148;&#x5224;&#x65AD;&#x5F53;&#x524D;&#x8FD0;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x662F;&#x5426;&#x8FBE;&#x5230;&#x6838;&#x5FC3;&#x7EBF;&#x7A0B;&#x6570;&#xFF0C;&#x5982;&#x679C;&#x8FBE;&#x5230;&#x7684;&#x8BDD;&#xFF0C;&#x4FE1;&#x4EFB;&#x5C31;&#x4F1A;&#x88AB;&#x5B58;&#x653E;&#x5728;&#x961F;&#x5217;&#x4E2D;&#x3002;</li>
</ul>
<p><code>ThreadPoolExecutor</code>&#x5176;&#x4ED6;&#x5E38;&#x89C1;&#x53C2;&#x6570;:</p>
<ul>
<li><strong><code>keepAliveTime</code></strong>:&#x5F53;&#x7EBF;&#x7A0B;&#x6C60;&#x4E2D;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x5927;&#x4E8E; <code>corePoolSize</code> &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5982;&#x679C;&#x8FD9;&#x65F6;&#x6CA1;&#x6709;&#x65B0;&#x7684;&#x4EFB;&#x52A1;&#x63D0;&#x4EA4;&#xFF0C;&#x6838;&#x5FC3;&#x7EBF;&#x7A0B;&#x5916;&#x7684;&#x7EBF;&#x7A0B;&#x4E0D;&#x4F1A;&#x7ACB;&#x5373;&#x9500;&#x6BC1;&#xFF0C;&#x800C;&#x662F;&#x4F1A;&#x7B49;&#x5F85;&#xFF0C;&#x76F4;&#x5230;&#x7B49;&#x5F85;&#x7684;&#x65F6;&#x95F4;&#x8D85;&#x8FC7;&#x4E86; <code>keepAliveTime</code>&#x624D;&#x4F1A;&#x88AB;&#x56DE;&#x6536;&#x9500;&#x6BC1;&#xFF1B;</li>
<li><strong><code>unit</code></strong> : <code>keepAliveTime</code> &#x53C2;&#x6570;&#x7684;&#x65F6;&#x95F4;&#x5355;&#x4F4D;&#x3002;</li>
<li><strong><code>threadFactory</code></strong> :executor &#x521B;&#x5EFA;&#x65B0;&#x7EBF;&#x7A0B;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x7528;&#x5230;&#x3002;</li>
<li><strong><code>handler</code></strong> :&#x9971;&#x548C;&#x7B56;&#x7565;&#x3002;&#x5173;&#x4E8E;&#x9971;&#x548C;&#x7B56;&#x7565;&#x4E0B;&#x9762;&#x5355;&#x72EC;&#x4ECB;&#x7ECD;&#x4E00;&#x4E0B;.</li>
</ul>
<p><img src="https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-7/&#x7EBF;&#x7A0B;&#x6C60;&#x5404;&#x4E2A;&#x53C2;&#x6570;&#x7684;&#x5173;&#x7CFB;.jpg" alt="&#x7EBF;&#x7A0B;&#x6C60;&#x5404;&#x4E2A;&#x53C2;&#x6570;&#x7684;&#x5173;&#x7CFB;"></p>
<p>&#x5982;&#x679C;&#x5F53;&#x524D;&#x540C;&#x65F6;&#x8FD0;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x8FBE;&#x5230;&#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x5E76;&#x4E14;&#x961F;&#x5217;&#x4E5F;&#x5DF2;&#x7ECF;&#x88AB;&#x653E;&#x6EE1;&#x4E86;&#x4EFB;&#x65F6;&#xFF0C;<code>ThreadPoolTaskExecutor</code> &#x5B9A;&#x4E49;&#x4E00;&#x4E9B;&#x7B56;&#x7565;:</p>
<ul>
<li><strong><code>ThreadPoolExecutor.AbortPolicy</code></strong>&#xFF1A;&#x629B;&#x51FA; <code>RejectedExecutionException</code>&#x6765;&#x62D2;&#x7EDD;&#x65B0;&#x4EFB;&#x52A1;&#x7684;&#x5904;&#x7406;&#x3002;</li>
<li><strong><code>ThreadPoolExecutor.CallerRunsPolicy</code></strong>&#xFF1A;&#x8C03;&#x7528;&#x6267;&#x884C;&#x81EA;&#x5DF1;&#x7684;&#x7EBF;&#x7A0B;&#x8FD0;&#x884C;&#x4EFB;&#x52A1;&#x3002;&#x60A8;&#x4E0D;&#x4F1A;&#x4EFB;&#x52A1;&#x8BF7;&#x6C42;&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x79CD;&#x7B56;&#x7565;&#x4F1A;&#x964D;&#x4F4E;&#x5BF9;&#x4E8E;&#x65B0;&#x4EFB;&#x52A1;&#x63D0;&#x4EA4;&#x901F;&#x5EA6;&#xFF0C;&#x5F71;&#x54CD;&#x7A0B;&#x5E8F;&#x7684;&#x6574;&#x4F53;&#x6027;&#x80FD;&#x3002;&#x53E6;&#x5916;&#xFF0C;&#x8FD9;&#x4E2A;&#x7B56;&#x7565;&#x559C;&#x6B22;&#x589E;&#x52A0;&#x961F;&#x5217;&#x5BB9;&#x91CF;&#x3002;&#x5982;&#x679C;&#x60A8;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x53EF;&#x4EE5;&#x627F;&#x53D7;&#x6B64;&#x5EF6;&#x8FDF;&#x5E76;&#x4E14;&#x4F60;&#x4E0D;&#x80FD;&#x4EFB;&#x52A1;&#x4E22;&#x5F03;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x4EFB;&#x52A1;&#x8BF7;&#x6C42;&#x7684;&#x8BDD;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x8FD9;&#x4E2A;&#x7B56;&#x7565;&#x3002;</li>
<li><strong><code>ThreadPoolExecutor.DiscardPolicy</code>&#xFF1A;</strong> &#x4E0D;&#x5904;&#x7406;&#x65B0;&#x4EFB;&#x52A1;&#xFF0C;&#x76F4;&#x63A5;&#x4E22;&#x5F03;&#x6389;&#x3002;</li>
<li><strong><code>ThreadPoolExecutor.DiscardOldestPolicy</code>&#xFF1A;</strong> &#x6B64;&#x7B56;&#x7565;&#x5C06;&#x4E22;&#x5F03;&#x6700;&#x65E9;&#x7684;&#x672A;&#x5904;&#x7406;&#x7684;&#x4EFB;&#x52A1;&#x8BF7;&#x6C42;&#x3002;</li>
</ul>
<blockquote>
<p>Spring &#x901A;&#x8FC7; <code>ThreadPoolTaskExecutor</code> &#x6216;&#x8005;&#x6211;&#x4EEC;&#x76F4;&#x63A5;&#x901A;&#x8FC7; <code>ThreadPoolExecutor</code> &#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5F53;&#x6211;&#x4EEC;&#x4E0D;&#x6307;&#x5B9A; <code>RejectedExecutionHandler</code> &#x9971;&#x548C;&#x7B56;&#x7565;&#x7684;&#x8BDD;&#x6765;&#x914D;&#x7F6E;&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x65F6;&#x5019;&#x9ED8;&#x8BA4;&#x4F7F;&#x7528;&#x7684;&#x662F; <code>ThreadPoolExecutor.AbortPolicy</code>&#x3002;&#x5728;&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;<code>ThreadPoolExecutor</code> &#x5C06;&#x629B;&#x51FA; <code>RejectedExecutionException</code> &#x6765;&#x62D2;&#x7EDD;&#x65B0;&#x6765;&#x7684;&#x4EFB;&#x52A1; &#xFF0C;&#x8FD9;&#x4EE3;&#x8868;&#x4F60;&#x5C06;&#x4E22;&#x5931;&#x5BF9;&#x8FD9;&#x4E2A;&#x4EFB;&#x52A1;&#x7684;&#x5904;&#x7406;&#x3002; &#x5BF9;&#x4E8E;&#x53EF;&#x4F38;&#x7F29;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF0C;&#x5EFA;&#x8BAE;&#x4F7F;&#x7528; <code>ThreadPoolExecutor.CallerRunsPolicy</code>&#x3002;&#x5F53;&#x6700;&#x5927;&#x6C60;&#x88AB;&#x586B;&#x6EE1;&#x65F6;&#xFF0C;&#x6B64;&#x7B56;&#x7565;&#x4E3A;&#x6211;&#x4EEC;&#x63D0;&#x4F9B;&#x53EF;&#x4F38;&#x7F29;&#x961F;&#x5217;&#x3002;&#xFF08;&#x8FD9;&#x4E2A;&#x76F4;&#x63A5;&#x67E5;&#x770B; <code>ThreadPoolExecutor</code> &#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x6E90;&#x7801;&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#xFF0C;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#x7684;&#x539F;&#x56E0;&#xFF0C;&#x8FD9;&#x91CC;&#x5C31;&#x4E0D;&#x8D34;&#x4EE3;&#x7801;&#x4E86;&#x3002;&#xFF09;</p>
<p>Executors &#x8FD4;&#x56DE;&#x7EBF;&#x7A0B;&#x6C60;&#x5BF9;&#x8C61;&#x7684;&#x5F0A;&#x7AEF;&#x5982;&#x4E0B;&#xFF1A;</p>
<ul>
<li><strong><code>FixedThreadPool</code> &#x548C; <code>SingleThreadExecutor</code></strong> &#xFF1A; &#x5141;&#x8BB8;&#x8BF7;&#x6C42;&#x7684;&#x961F;&#x5217;&#x957F;&#x5EA6;&#x4E3A; Integer.MAX_VALUE,&#x53EF;&#x80FD;&#x5806;&#x79EF;&#x5927;&#x91CF;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x4ECE;&#x800C;&#x5BFC;&#x81F4; OOM&#x3002;</li>
<li><strong>CachedThreadPool &#x548C; ScheduledThreadPool</strong> &#xFF1A; &#x5141;&#x8BB8;&#x521B;&#x5EFA;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;&#x4E3A; Integer.MAX_VALUE &#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x521B;&#x5EFA;&#x5927;&#x91CF;&#x7EBF;&#x7A0B;&#xFF0C;&#x4ECE;&#x800C;&#x5BFC;&#x81F4; OOM&#x3002;</li>
</ul>
</blockquote>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ThreadPoolExecutorDemo</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        ExecutorService threadpools = <span class="hljs-keyword">new</span> ThreadPoolExecutor(
                <span class="hljs-number">3</span>, 
                <span class="hljs-number">5</span>, 
                <span class="hljs-number">1l</span>,
                TimeUnit.SECONDS,
                <span class="hljs-keyword">new</span> LinkedBlockingDeque&lt;&gt;(<span class="hljs-number">3</span>),
                Executors.defaultThreadFactory(),
                <span class="hljs-keyword">new</span> ThreadPoolExecutor.AbortPolicy());
<span class="hljs-comment">//new ThreadPoolExecutor.AbortPolicy();</span>
<span class="hljs-comment">//new ThreadPoolExecutor.CallerRunsPolicy();</span>
<span class="hljs-comment">//new ThreadPoolExecutor.DiscardOldestPolicy();</span>
<span class="hljs-comment">//new ThreadPoolExecutor.DiscardPolicy();</span>
        <span class="hljs-keyword">try</span> {
            <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">8</span>; i++) {
                threadpools.execute(() -&gt; {
                    System.out.println(Thread.currentThread().getName() + <span class="hljs-string">&quot;\t&#x529E;&#x7406;&#x4E1A;&#x52A1;&quot;</span>);
                });
            }
        } <span class="hljs-keyword">catch</span> (Exception e) {
            e.printStackTrace();
        } <span class="hljs-keyword">finally</span> {
            threadpools.shutdown();
        }
    }
}
</code></pre>
<h3 id="java&#x9501;&#x673A;&#x5236;"><a name="java&#x9501;&#x673A;&#x5236;" class="anchor-navigation-ex-anchor" href="#java&#x9501;&#x673A;&#x5236;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="java&#x9501;&#x673A;&#x5236;" class="plugin-anchor" href="#java&#x9501;&#x673A;&#x5236;"><i class="fa fa-link" aria-hidden="true"></i></a>Java&#x9501;&#x673A;&#x5236;</h3>
<h4 id="&#x516C;&#x5E73;&#x9501;&#x975E;&#x516C;&#x5E73;&#x9501;"><a name="&#x516C;&#x5E73;&#x9501;&#x975E;&#x516C;&#x5E73;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x516C;&#x5E73;&#x9501;&#x975E;&#x516C;&#x5E73;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x516C;&#x5E73;&#x9501;&#x975E;&#x516C;&#x5E73;&#x9501;" class="plugin-anchor" href="#&#x516C;&#x5E73;&#x9501;&#x975E;&#x516C;&#x5E73;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x516C;&#x5E73;&#x9501;/&#x975E;&#x516C;&#x5E73;&#x9501;</h4>
<p><strong>&#x516C;&#x5E73;&#x9501;&#x6307;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x6309;&#x7167;&#x7533;&#x8BF7;&#x9501;&#x7684;&#x987A;&#x5E8F;&#x6765;&#x83B7;&#x53D6;&#x9501;&#x3002;&#x975E;&#x516C;&#x5E73;&#x9501;&#x6307;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x987A;&#x5E8F;&#x5E76;&#x4E0D;&#x662F;&#x6309;&#x7167;&#x7533;&#x8BF7;&#x9501;&#x7684;&#x987A;&#x5E8F;&#xFF0C;&#x6709;&#x53EF;&#x80FD;&#x540E;&#x7533;&#x8BF7;&#x7684;&#x7EBF;&#x7A0B;&#x6BD4;&#x5148;&#x7533;&#x8BF7;&#x7684;&#x7EBF;&#x7A0B;&#x4F18;&#x5148;&#x83B7;&#x53D6;&#x9501;&#x3002;&#x6709;&#x53EF;&#x80FD;&#xFF0C;&#x4F1A;&#x9020;&#x6210;&#x4F18;&#x5148;&#x7EA7;&#x53CD;&#x8F6C;&#x6216;&#x8005;&#x9965;&#x997F;&#x73B0;&#x8C61;&#xFF08;&#x5F88;&#x957F;&#x65F6;&#x95F4;&#x90FD;&#x6CA1;&#x83B7;&#x53D6;&#x5230;&#x9501;-&#x975E;&#x6D32;&#x4EBA;&#x2026;&#xFF09;&#xFF0C;ReentrantLock&#xFF0C;&#x4E86;&#x89E3;&#x4E00;&#x4E0B;&#x3002;</strong></p>
<h4 id="&#x53EF;&#x91CD;&#x5165;&#x9501;"><a name="&#x53EF;&#x91CD;&#x5165;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x53EF;&#x91CD;&#x5165;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x53EF;&#x91CD;&#x5165;&#x9501;" class="plugin-anchor" href="#&#x53EF;&#x91CD;&#x5165;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x53EF;&#x91CD;&#x5165;&#x9501;</h4>
<p><strong>&#x53EF;&#x91CD;&#x5165;&#x9501;&#x53C8;&#x540D;&#x9012;&#x5F52;&#x9501;&#xFF0C;&#x662F;&#x6307;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5728;&#x5916;&#x5C42;&#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5728;&#x8FDB;&#x5165;&#x5185;&#x5C42;&#x65B9;&#x6CD5;&#x4F1A;&#x81EA;&#x52A8;&#x83B7;&#x53D6;&#x9501;&#xFF0C;&#x5178;&#x578B;&#x7684;synchronized&#xFF0C;&#x4E86;&#x89E3;&#x4E00;&#x4E0B;</strong></p>
<pre><code class="lang-java"><span class="hljs-function"><span class="hljs-keyword">synchronized</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setA</span><span class="hljs-params">()</span> <span class="hljs-keyword">throws</span> Exception </span>{
      Thread.sleep(<span class="hljs-number">1000</span>);
      setB(); <span class="hljs-comment">// &#x56E0;&#x4E3A;&#x83B7;&#x53D6;&#x4E86;setA()&#x7684;&#x9501;&#xFF0C;&#x6B64;&#x65F6;&#x8C03;&#x7528;setB()&#x5C06;&#x4F1A;&#x81EA;&#x52A8;&#x83B7;&#x53D6;setB()&#x7684;&#x9501;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x81EA;&#x52A8;&#x83B7;&#x53D6;&#x7684;&#x8BDD;&#x65B9;&#x6CD5;B&#x5C06;&#x4E0D;&#x4F1A;&#x6267;&#x884C;</span>
}
<span class="hljs-function"><span class="hljs-keyword">synchronized</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setB</span><span class="hljs-params">()</span> <span class="hljs-keyword">throws</span> Exception </span>{
      Thread.sleep(<span class="hljs-number">1000</span>);
}
</code></pre>
<h4 id="&#x72EC;&#x4EAB;&#x9501;&#x5171;&#x4EAB;&#x9501;"><a name="&#x72EC;&#x4EAB;&#x9501;&#x5171;&#x4EAB;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x72EC;&#x4EAB;&#x9501;&#x5171;&#x4EAB;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x72EC;&#x4EAB;&#x9501;&#x5171;&#x4EAB;&#x9501;" class="plugin-anchor" href="#&#x72EC;&#x4EAB;&#x9501;&#x5171;&#x4EAB;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x72EC;&#x4EAB;&#x9501;/&#x5171;&#x4EAB;&#x9501;</h4>
<ul>
<li>&#x72EC;&#x4EAB;&#x9501;&#xFF1A;&#x662F;&#x6307;&#x8BE5;&#x9501;&#x4E00;&#x6B21;&#x53EA;&#x80FD;&#x88AB;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6240;&#x6301;&#x6709;&#x3002;</li>
<li>&#x5171;&#x4EAB;&#x9501;&#xFF1A;&#x662F;&#x8BE5;&#x9501;&#x53EF;&#x88AB;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x6240;&#x6301;&#x6709;&#x3002;</li>
</ul>
<h4 id="&#x4E92;&#x65A5;&#x9501;&#x8BFB;&#x5199;&#x9501;"><a name="&#x4E92;&#x65A5;&#x9501;&#x8BFB;&#x5199;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x4E92;&#x65A5;&#x9501;&#x8BFB;&#x5199;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4E92;&#x65A5;&#x9501;&#x8BFB;&#x5199;&#x9501;" class="plugin-anchor" href="#&#x4E92;&#x65A5;&#x9501;&#x8BFB;&#x5199;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4E92;&#x65A5;&#x9501;/&#x8BFB;&#x5199;&#x9501;</h4>
<p><strong>&#x4E0A;&#x9762;&#x8BB2;&#x7684;&#x72EC;&#x4EAB;&#x9501;/&#x5171;&#x4EAB;&#x9501;&#x5C31;&#x662F;&#x4E00;&#x79CD;&#x5E7F;&#x4E49;&#x7684;&#x8BF4;&#x6CD5;&#xFF0C;&#x4E92;&#x65A5;&#x9501;/&#x8BFB;&#x5199;&#x9501;&#x5C31;&#x662F;&#x5176;&#x5177;&#x4F53;&#x7684;&#x5B9E;&#x73B0;</strong></p>
<h4 id="&#x4E50;&#x89C2;&#x9501;&#x60B2;&#x89C2;&#x9501;"><a name="&#x4E50;&#x89C2;&#x9501;&#x60B2;&#x89C2;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x4E50;&#x89C2;&#x9501;&#x60B2;&#x89C2;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4E50;&#x89C2;&#x9501;&#x60B2;&#x89C2;&#x9501;" class="plugin-anchor" href="#&#x4E50;&#x89C2;&#x9501;&#x60B2;&#x89C2;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4E50;&#x89C2;&#x9501;/&#x60B2;&#x89C2;&#x9501;</h4>
<ol>
<li><strong>&#x4E50;&#x89C2;&#x9501;&#x4E0E;&#x60B2;&#x89C2;&#x9501;&#x4E0D;&#x662F;&#x6307;&#x5177;&#x4F53;&#x7684;&#x4EC0;&#x4E48;&#x7C7B;&#x578B;&#x7684;&#x9501;&#xFF0C;&#x800C;&#x662F;&#x6307;&#x770B;&#x5F85;&#x5175;&#x6CD5;&#x540C;&#x6B65;&#x7684;&#x89D2;&#x5EA6;&#x3002;</strong></li>
<li><strong>&#x60B2;&#x89C2;&#x9501;&#x8BA4;&#x4E3A;&#x5BF9;&#x4E8E;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x6570;&#x636E;&#x7684;&#x5E76;&#x53D1;&#x64CD;&#x4F5C;&#xFF0C;&#x4E00;&#x5B9A;&#x662F;&#x4F1A;&#x53D1;&#x751F;&#x4FEE;&#x6539;&#x7684;&#xFF0C;&#x54EA;&#x6015;&#x6CA1;&#x6709;&#x4FEE;&#x6539;&#xFF0C;&#x4E5F;&#x4F1A;&#x8BA4;&#x4E3A;&#x4FEE;&#x6539;&#x3002;&#x56E0;&#x6B64;&#x5BF9;&#x4E8E;&#x540C;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x7684;&#x5E76;&#x53D1;&#x64CD;&#x4F5C;&#xFF0C;&#x60B2;&#x89C2;&#x9501;&#x91C7;&#x53D6;&#x52A0;&#x9501;&#x7684;&#x5F62;&#x5F0F;&#x3002;&#x60B2;&#x89C2;&#x7684;&#x8BA4;&#x4E3A;&#xFF0C;&#x4E0D;&#x52A0;&#x9501;&#x7684;&#x5E76;&#x53D1;&#x64CD;&#x4F5C;&#x4E00;&#x5B9A;&#x4F1A;&#x51FA;&#x73B0;&#x95EE;&#x9898;&#x3002;</strong></li>
<li><strong>&#x4E50;&#x89C2;&#x9501;&#x5219;&#x8BA4;&#x4E3A;&#x5BF9;&#x4E8E;&#x540C;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x7684;&#x5E76;&#x53D1;&#x64CD;&#x4F5C;&#xFF0C;&#x662F;&#x4E0D;&#x4F1A;&#x53D1;&#x751F;&#x4FEE;&#x6539;&#x7684;&#x3002;&#x5728;&#x66F4;&#x65B0;&#x6570;&#x636E;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F1A;&#x91C7;&#x7528;&#x5C1D;&#x8BD5;&#x66F4;&#x65B0;&#xFF0C;&#x4E0D;&#x65AD;&#x91CD;&#x65B0;&#x7684;&#x65B9;&#x5F0F;&#x66F4;&#x65B0;&#x6570;&#x636E;&#x3002;&#x4E50;&#x89C2;&#x7684;&#x8BA4;&#x4E3A;&#xFF0C;&#x4E0D;&#x52A0;&#x9501;&#x7684;&#x5E76;&#x53D1;&#x64CD;&#x4F5C;&#x65F6;&#x6CA1;&#x6709;&#x4E8B;&#x60C5;&#x7684;&#x3002;</strong></li>
<li><strong>&#x60B2;&#x89C2;&#x9501;&#x9002;&#x5408;&#x5199;&#x64CD;&#x4F5C;&#x975E;&#x5E38;&#x591A;&#x7684;&#x573A;&#x666F;&#xFF0C;&#x4E50;&#x89C2;&#x9501;&#x9002;&#x5408;&#x8BFB;&#x64CD;&#x4F5C;&#x975E;&#x5E38;&#x591A;&#x7684;&#x573A;&#x666F;&#xFF0C;&#x4E0D;&#x52A0;&#x9501;&#x5E26;&#x6765;&#x5927;&#x91CF;&#x7684;&#x6027;&#x80FD;&#x63D0;&#x5347;&#x3002;</strong></li>
<li><strong>&#x60B2;&#x89C2;&#x9501;&#x5728;Java&#x4E2D;&#x7684;&#x4F7F;&#x7528;&#xFF0C;&#x5C31;&#x662F;&#x5229;&#x7528;&#x5404;&#x79CD;&#x9501;&#x3002;&#x4E50;&#x89C2;&#x9501;&#x5728;Java&#x4E2D;&#x7684;&#x4F7F;&#x7528;&#xFF0C;&#x662F;&#x65E0;&#x9501;&#x7F16;&#x7A0B;&#xFF0C;&#x5E38;&#x5E38;&#x91C7;&#x7528;&#x7684;&#x662F;CAS&#x7B97;&#x6CD5;&#xFF0C;&#x5178;&#x578B;&#x7684;&#x4F8B;&#x5B50;&#x5C31;&#x662F;&#x539F;&#x5B50;&#x7C7B;&#xFF0C;&#x901A;&#x8FC7;CAS&#x81EA;&#x65CB;&#x5B9E;&#x73B0;&#x539F;&#x5B50;&#x7C7B;&#x64CD;&#x4F5C;&#x7684;&#x66F4;&#x65B0;&#x3002;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x662F;&#x60B2;&#x89C2;&#x9501;&#x7684;&#x4E00;&#x79CD;&#xFF0C;&#x81EA;&#x65CB;&#x9501;&#x3001;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x4E0E;&#x504F;&#x5411;&#x9501;&#x5C5E;&#x4E8E;&#x4E50;&#x89C2;&#x9501;</strong></li>
</ol>
<h4 id="&#x5206;&#x6BB5;&#x9501;"><a name="&#x5206;&#x6BB5;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x5206;&#x6BB5;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5206;&#x6BB5;&#x9501;" class="plugin-anchor" href="#&#x5206;&#x6BB5;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5206;&#x6BB5;&#x9501;</h4>
<ol>
<li><strong>&#x5206;&#x6BB5;&#x9501;&#x5176;&#x5B9E;&#x662F;&#x4E00;&#x79CD;&#x9501;&#x7684;&#x8BBE;&#x8BA1;&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x5177;&#x4F53;&#x7684;&#x4E00;&#x79CD;&#x9501;&#xFF0C;&#x5BF9;&#x4E8E;ConcurrentHashMap&#x800C;&#x8A00;&#xFF0C;&#x5176;&#x5E76;&#x53D1;&#x7684;&#x5B9E;&#x73B0;&#x5C31;&#x662F;&#x901A;&#x8FC7;&#x5206;&#x6BB5;&#x9501;&#x7684;&#x5F62;&#x5F0F;&#x6765;&#x54E6;&#x5B9E;&#x73B0;&#x9AD8;&#x6548;&#x7684;&#x5E76;&#x53D1;&#x64CD;&#x4F5C;&#x3002;</strong></li>
<li><strong> &#x4EE5;ConcurrentHashMap&#x6765;&#x8BF4;&#x4E00;&#x4E0B;&#x5206;&#x6BB5;&#x9501;&#x7684;&#x542B;&#x4E49;&#x4EE5;&#x53CA;&#x8BBE;&#x8BA1;&#x601D;&#x60F3;&#xFF0C;ConcurrentHashMap&#x4E2D;&#x7684;&#x5206;&#x6BB5;&#x9501;&#x79F0;&#x4E3A;Segment&#xFF0C;&#x5B83;&#x5373;&#x7C7B;&#x4F3C;&#x4E8E;HashMap&#xFF08;JDK7&#x4E0E;JDK8&#x4E2D;HashMap&#x7684;&#x5B9E;&#x73B0;&#xFF09;&#x7684;&#x7ED3;&#x6784;&#xFF0C;&#x5373;&#x5185;&#x90E8;&#x62E5;&#x6709;&#x4E00;&#x4E2A;Entry&#x6570;&#x7EC4;&#xFF0C;&#x6570;&#x7EC4;&#x4E2D;&#x7684;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#x53C8;&#x662F;&#x4E00;&#x4E2A;&#x94FE;&#x8868;&#xFF1B;&#x540C;&#x65F6;&#x53C8;&#x662F;ReentrantLock&#xFF08;Segment&#x7EE7;&#x627F;&#x4E86;ReentrantLock&#xFF09;</strong></li>
<li><strong>&#x5F53;&#x9700;&#x8981;put&#x5143;&#x7D20;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x5BF9;&#x6574;&#x4E2A;hashmap&#x8FDB;&#x884C;&#x52A0;&#x9501;&#xFF0C;&#x800C;&#x662F;&#x5148;&#x901A;&#x8FC7;hashcode&#x6765;&#x77E5;&#x9053;&#x4ED6;&#x8981;&#x653E;&#x5728;&#x90A3;&#x4E00;&#x4E2A;&#x5206;&#x6BB5;&#x4E2D;&#xFF0C;&#x7136;&#x540E;&#x5BF9;&#x8FD9;&#x4E2A;&#x5206;&#x6BB5;&#x8FDB;&#x884C;&#x52A0;&#x9501;&#xFF0C;&#x6240;&#x4EE5;&#x5F53;&#x591A;&#x7EBF;&#x7A0B;put&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EA;&#x8981;&#x4E0D;&#x662F;&#x653E;&#x5728;&#x4E00;&#x4E2A;&#x5206;&#x6BB5;&#x4E2D;&#xFF0C;&#x5C31;&#x5B9E;&#x73B0;&#x4E86;&#x771F;&#x6B63;&#x7684;&#x5E76;&#x884C;&#x7684;&#x63D2;&#x5165;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x5728;&#x7EDF;&#x8BA1;size&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EF;&#x5C31;&#x662F;&#x83B7;&#x53D6;hashmap&#x5168;&#x5C40;&#x4FE1;&#x606F;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5C31;&#x9700;&#x8981;&#x83B7;&#x53D6;&#x6240;&#x6709;&#x7684;&#x5206;&#x6BB5;&#x9501;&#x624D;&#x80FD;&#x7EDF;&#x8BA1;&#x3002;</strong></li>
<li><strong>&#x5206;&#x6BB5;&#x9501;&#x7684;&#x8BBE;&#x8BA1;&#x76EE;&#x7684;&#x662F;&#x7EC6;&#x5316;&#x9501;&#x7684;&#x7C92;&#x5EA6;&#xFF0C;&#x5F53;&#x64CD;&#x4F5C;&#x4E0D;&#x9700;&#x8981;&#x66F4;&#x65B0;&#x6574;&#x4E2A;&#x6570;&#x7EC4;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5C31;&#x4EC5;&#x4EC5;&#x9488;&#x5BF9;&#x6570;&#x7EC4;&#x4E2D;&#x7684;&#x4E00;&#x9879;&#x8FDB;&#x884C;&#x52A0;&#x9501;&#x64CD;&#x4F5C;&#x3002;</strong></li>
</ol>
<h4 id="&#x504F;&#x5411;&#x9501;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x91CD;&#x91CF;&#x7EA7;&#x9501;"><a name="&#x504F;&#x5411;&#x9501;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x91CD;&#x91CF;&#x7EA7;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x504F;&#x5411;&#x9501;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x91CD;&#x91CF;&#x7EA7;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x504F;&#x5411;&#x9501;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x91CD;&#x91CF;&#x7EA7;&#x9501;" class="plugin-anchor" href="#&#x504F;&#x5411;&#x9501;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x91CD;&#x91CF;&#x7EA7;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x504F;&#x5411;&#x9501;/&#x8F7B;&#x91CF;&#x7EA7;&#x9501;/&#x91CD;&#x91CF;&#x7EA7;&#x9501;</h4>
<ol>
<li><strong>&#x8FD9;&#x4E09;&#x79CD;&#x9501;&#x662F;&#x9501;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x5E76;&#x4E14;&#x662F;&#x9488;&#x5BF9;Synchronized&#x3002;&#x5728;Java5&#x901A;&#x8FC7;&#x5F15;&#x5165;&#x9501;&#x5347;&#x7EA7;&#x7684;&#x673A;&#x5236;&#x6765;&#x5B9E;&#x73B0;&#x9AD8;&#x6548;Synchronized&#x3002;&#x8FD9;&#x4E09;&#x79CD;&#x9501;&#x7684;&#x72B6;&#x6001;&#x662F;&#x901A;&#x8FC7;&#x5BF9;&#x8C61;&#x76D1;&#x89C6;&#x5668;&#x5728;&#x5BF9;&#x8C61;&#x5934;&#x4E2D;&#x7684;&#x5B57;&#x6BB5;&#x6765;&#x8868;&#x660E;&#x7684;&#x3002;&#x504F;&#x5411;&#x9501;&#x662F;&#x6307;&#x4E00;&#x6BB5;&#x540C;&#x6B65;&#x4EE3;&#x7801;&#x4E00;&#x76F4;&#x88AB;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6240;&#x8BBF;&#x95EE;&#xFF0C;&#x90A3;&#x4E48;&#x8BE5;&#x7EBF;&#x7A0B;&#x4F1A;&#x81EA;&#x52A8;&#x83B7;&#x53D6;&#x9501;&#x3002;&#x964D;&#x4F4E;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x4EE3;&#x4EF7;&#x3002;</strong></li>
<li><strong>&#x504F;&#x5411;&#x9501;&#x7684;&#x9002;&#x7528;&#x573A;&#x666F;&#xFF1A;&#x59CB;&#x7EC8;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5728;&#x6267;&#x884C;&#x4EE3;&#x7801;&#x5757;&#xFF0C;&#x5728;&#x5B83;&#x6CA1;&#x6709;&#x6267;&#x884C;&#x5B8C;&#x91CA;&#x653E;&#x9501;&#x4E4B;&#x524D;&#xFF0C;&#x6CA1;&#x6709;&#x5176;&#x5B83;&#x7EBF;&#x7A0B;&#x53BB;&#x6267;&#x884C;&#x540C;&#x6B65;&#x5FEB;&#xFF0C;&#x5728;&#x9501;&#x65E0;&#x7ADE;&#x4E89;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x4F7F;&#x7528;&#xFF0C;&#x4E00;&#x65E6;&#x6709;&#x4E86;&#x7ADE;&#x4E89;&#x5C31;&#x5347;&#x7EA7;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;&#x5347;&#x7EA7;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x7684;&#x65F6;&#x5019;&#x9700;&#x8981;&#x64A4;&#x9500;&#x504F;&#x5411;&#x9501;&#xFF0C;&#x64A4;&#x9500;&#x504F;&#x5411;&#x9501;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x5BFC;&#x81F4;stop the word&#x64CD;&#x4F5C;&#xFF1B;&#x5728;&#x6709;&#x9501;&#x7ADE;&#x4E89;&#x65F6;&#xFF0C;&#x504F;&#x5411;&#x9501;&#x4F1A;&#x591A;&#x505A;&#x5F88;&#x591A;&#x989D;&#x5916;&#x64CD;&#x4F5C;&#xFF0C;&#x5C24;&#x5176;&#x662F;&#x64A4;&#x9500;&#x504F;&#x5411;&#x9501;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x5BFC;&#x81F4;&#x8FDB;&#x5165;&#x5B89;&#x5168;&#x70B9;&#xFF0C;&#x5B89;&#x5168;&#x70B9;&#x4F1A;&#x5BFC;&#x81F4;stw&#xFF0C;&#x5BFC;&#x81F4;&#x6027;&#x80FD;&#x4E0B;&#x964D;&#xFF0C;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#x5E94;&#x5F53;&#x7981;&#x7528;&#x3002;</strong></li>
<li><strong>&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x662F;&#x6307;&#x5F53;&#x9501;&#x662F;&#x504F;&#x5411;&#x9501;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x88AB;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x9501;&#x8BBF;&#x95EE;&#xFF0C;&#x504F;&#x5411;&#x9501;&#x5C31;&#x4F1A;&#x5347;&#x7EA7;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x4F1A;&#x901A;&#x8FC7;&#x81EA;&#x9009;&#x7684;&#x5F62;&#x5F0F;&#x5C1D;&#x8BD5;&#x83B7;&#x53D6;&#x9501;&#xFF0C;&#x4E0D;&#x4F1A;&#x963B;&#x585E;&#xFF0C;&#x63D0;&#x9AD8;&#x6027;&#x80FD;&#x3002;</strong></li>
<li><strong>&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x662F;&#x6307;&#x5F53;&#x9501;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x867D;&#x7136;&#x662F;&#x81EA;&#x65CB;&#xFF0C;&#x4F46;&#x81EA;&#x65CB;&#x4E0D;&#x4F1A;&#x4E00;&#x76F4;&#x6301;&#x7EED;&#x4E0B;&#x53BB;&#xFF0C;&#x5F53;&#x81EA;&#x65CB;&#x4E00;&#x5B9A;&#x6B21;&#x6570;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8FD8;&#x6CA1;&#x6709;&#x83B7;&#x53D6;&#x5230;&#x9501;&#xFF0C;&#x5C31;&#x4F1A;&#x8FDB;&#x5165;&#x963B;&#x585E;&#xFF0C;&#x8BE5;&#x9501;&#x81A8;&#x80C0;&#x4E3A;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x3002;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x4F1A;&#x8BA9;&#x5176;&#x4ED6;&#x7533;&#x8BF7;&#x7684;&#x7EBF;&#x7A0B;&#x8FDB;&#x5165;&#x963B;&#x585E;&#xFF0C;&#x6027;&#x80FD;&#x964D;&#x4F4E;&#x3002;</strong></li>
</ol>
<h4 id="&#x81EA;&#x65CB;&#x9501;"><a name="&#x81EA;&#x65CB;&#x9501;" class="anchor-navigation-ex-anchor" href="#&#x81EA;&#x65CB;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x81EA;&#x65CB;&#x9501;" class="plugin-anchor" href="#&#x81EA;&#x65CB;&#x9501;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x81EA;&#x65CB;&#x9501;</h4>
<ol>
<li><strong>&#x5728;Java&#x4E2D;&#xFF0C;&#x81EA;&#x65CB;&#x9501;&#x662F;&#x6307;&#x5C1D;&#x8BD5;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x4E0D;&#x4F1A;&#x7ACB;&#x5373;&#x963B;&#x585E;&#xFF0C;&#x800C;&#x662F;&#x91C7;&#x7528;&#x5FAA;&#x73AF;&#x7684;&#x65B9;&#x5F0F;&#x53BB;&#x5C1D;&#x8BD5;&#x83B7;&#x53D6;&#x9501;&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x597D;&#x5904;&#x662F;&#x51CF;&#x5C11;&#x7EBF;&#x7A0B;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#x7684;&#x6D88;&#x8017;&#xFF0C;&#x7F3A;&#x70B9;&#x662F;&#x5FAA;&#x73AF;&#x4F1A;&#x6D88;&#x8017;CPU&#x3002;</strong></li>
<li><strong>&#x81EA;&#x65CB;&#x9501;&#x539F;&#x7406;&#x975E;&#x5E38;&#x7B80;&#x5355;&#xFF0C;&#x5982;&#x679C;&#x6301;&#x6709;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x80FD;&#x5728;&#x5F88;&#x77ED;&#x65F6;&#x95F4;&#x5185;&#x91CA;&#x653E;&#x9501;&#x8D44;&#x6E90;&#xFF0C;&#x90A3;&#x4E48;&#x90A3;&#x4E9B;&#x7B49;&#x5F85;&#x7ADE;&#x4E89;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x5C31;&#x4E0D;&#x9700;&#x8981;&#x505A;&#x5185;&#x6838;&#x6001;&#x548C;&#x7528;&#x6237;&#x6001;&#x4E4B;&#x95F4;&#x7684;&#x5207;&#x6362;&#x8FDB;&#x5165;&#x963B;&#x585E;&#x6302;&#x8D77;&#x72B6;&#x6001;&#xFF0C;&#x5B83;&#x4EEC;&#x53EA;&#x9700;&#x8981;&#x7B49;&#x4E00;&#x7B49;&#xFF08;&#x81EA;&#x65CB;&#xFF09;&#xFF0C;&#x7B49;&#x6301;&#x6709;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x91CA;&#x653E;&#x9501;&#x540E;&#x5373;&#x53EF;&#x7ACB;&#x5373;&#x83B7;&#x53D6;&#x9501;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x907F;&#x514D;&#x7528;&#x6237;&#x7EBF;&#x7A0B;&#x548C;&#x5185;&#x6838;&#x7684;&#x5207;&#x6362;&#x7684;&#x6D88;&#x8017;&#x3002;</strong></li>
<li><strong>&#x81EA;&#x65CB;&#x9501;&#x5C3D;&#x53EF;&#x80FD;&#x7684;&#x51CF;&#x5C11;&#x7EBF;&#x7A0B;&#x7684;&#x963B;&#x585E;&#xFF0C;&#x9002;&#x7528;&#x4E8E;&#x9501;&#x7684;&#x7ADE;&#x4E89;&#x4E0D;&#x6FC0;&#x70C8;&#xFF0C;&#x4E14;&#x5360;&#x7528;&#x9501;&#x65F6;&#x95F4;&#x975E;&#x5E38;&#x77ED;&#x7684;&#x4EE3;&#x7801;&#x6765;&#x8BF4;&#x6027;&#x80FD;&#x80FD;&#x5927;&#x5E45;&#x5EA6;&#x7684;&#x63D0;&#x5347;&#xFF0C;&#x56E0;&#x4E3A;&#x81EA;&#x65CB;&#x7684;&#x6D88;&#x8017;&#x4F1A;&#x5C0F;&#x4E8E;&#x7EBF;&#x7A0B;&#x963B;&#x585E;&#x6302;&#x8D77;&#x518D;&#x5524;&#x9192;&#x7684;&#x64CD;&#x4F5C;&#x7684;&#x6D88;&#x8017;&#x3002;</strong></li>
<li><strong>&#x4F46;&#x662F;&#x5982;&#x679C;&#x9501;&#x7684;&#x7ADE;&#x4E89;&#x6FC0;&#x70C8;&#xFF0C;&#x6216;&#x8005;&#x6301;&#x6709;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x9700;&#x8981;&#x957F;&#x65F6;&#x95F4;&#x5360;&#x7528;&#x9501;&#x6267;&#x884C;&#x540C;&#x6B65;&#x5757;&#xFF0C;&#x8FD9;&#x65F6;&#x5019;&#x5C31;&#x4E0D;&#x9002;&#x7528;&#x4F7F;&#x7528;&#x81EA;&#x65CB;&#x9501;&#x4E86;&#xFF0C;&#x56E0;&#x4E3A;&#x81EA;&#x65CB;&#x9501;&#x5728;&#x83B7;&#x53D6;&#x9501;&#x524D;&#x4E00;&#x76F4;&#x90FD;&#x662F;&#x5360;&#x7528;cpu&#x505A;&#x65E0;&#x7528;&#x529F;&#xFF0C;&#x540C;&#x65F6;&#x6709;&#x5927;&#x91CF;&#x7EBF;&#x7A0B;&#x5728;&#x7ADE;&#x4E89;&#x4E00;&#x4E2A;&#x9501;&#xFF0C;&#x4F1A;&#x5BFC;&#x81F4;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x65F6;&#x95F4;&#x5F88;&#x957F;&#xFF0C;&#x7EBF;&#x7A0B;&#x81EA;&#x65CB;&#x7684;&#x6D88;&#x8017;&#x5927;&#x4E8E;&#x7EBF;&#x7A0B;&#x963B;&#x585E;&#x6302;&#x8D77;&#x64CD;&#x4F5C;&#x7684;&#x6D88;&#x8017;&#xFF0C;&#x5176;&#x5B83;&#x9700;&#x8981;cpu&#x7684;&#x7EBF;&#x7A0B;&#x53C8;&#x4E0D;&#x80FD;&#x83B7;&#x53D6;&#x5230;cpu&#xFF0C;&#x9020;&#x6210;cpu&#x7684;&#x6D6A;&#x8D39;&#x3002;</strong></li>
</ol>
<h4 id="java&#x9501;&#x603B;&#x7ED3;"><a name="java&#x9501;&#x603B;&#x7ED3;" class="anchor-navigation-ex-anchor" href="#java&#x9501;&#x603B;&#x7ED3;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="java&#x9501;&#x603B;&#x7ED3;" class="plugin-anchor" href="#java&#x9501;&#x603B;&#x7ED3;"><i class="fa fa-link" aria-hidden="true"></i></a>Java&#x9501;&#x603B;&#x7ED3;</h4>
<p><strong>Java&#x9501;&#x673A;&#x5236;&#x53EF;&#x5F52;&#x4E3A;Sychornized&#x9501;&#x548C;Lock&#x9501;&#x4E24;&#x7C7B;&#x3002;Synchronized&#x662F;&#x57FA;&#x4E8E;JVM&#x6765;&#x4FDD;&#x8BC1;&#x6570;&#x636E;&#x540C;&#x6B65;&#x7684;&#xFF0C;&#x800C;Lock&#x5219;&#x662F;&#x786C;&#x4EF6;&#x5C42;&#x9762;&#xFF0C;&#x4F9D;&#x8D56;&#x7279;&#x6B8A;&#x7684;CPU&#x6307;&#x4EE4;&#x6765;&#x5B9E;&#x73B0;&#x6570;&#x636E;&#x540C;&#x6B65;&#x7684;&#x3002;</strong></p>
<ul>
<li>Synchronized&#x662F;&#x4E00;&#x4E2A;&#x975E;&#x516C;&#x5E73;&#x3001;&#x60B2;&#x89C2;&#x3001;&#x72EC;&#x4EAB;&#x3001;&#x4E92;&#x65A5;&#x3001;&#x53EF;&#x91CD;&#x5165;&#x7684;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x3002;</li>
<li>ReentrantLock&#x662F;&#x4E00;&#x4E2A;&#x9ED8;&#x8BA4;&#x975E;&#x516C;&#x5E73;&#x4F46;&#x53EF;&#x5B9E;&#x73B0;&#x516C;&#x5E73;&#x7684;&#x3001;&#x60B2;&#x89C2;&#x3001;&#x72EC;&#x4EAB;&#x3001;&#x4E92;&#x65A5;&#x3001;&#x53EF;&#x91CD;&#x5165;&#x3001;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x3002;</li>
<li>ReentrantReadWriteLock&#x662F;&#x4E00;&#x4E2A;&#x9ED8;&#x8BA4;&#x975E;&#x516C;&#x5E73;&#x4F46;&#x53EF;&#x5B9E;&#x73B0;&#x516C;&#x5E73;&#x7684;&#x3001;&#x60B2;&#x89C2;&#x3001;&#x5199;&#x72EC;&#x4EAB;&#x3001;&#x8BFB;&#x5171;&#x4EAB;&#x3001;&#x8BFB;&#x5199;&#x3001;&#x53EF;&#x91CD;&#x5165;&#x3001;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x3002;</li>
</ul>

<script>console.log("plugin-popup....");document.onclick = function(e){ e.target.tagName === "IMG" && window.open(e.target.src,e.target.src)}</script><style>img{cursor:pointer}</style>
                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="10面试题一.html" class="navigation navigation-prev " aria-label="Previous page: 12.面试题一">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="../basic/collection/1.java集合.html" class="navigation navigation-next " aria-label="Next page: 1.集合架构">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"13.面试题二.md","level":"6.14","depth":1,"next":{"title":"1.集合架构","level":"7.1","depth":1,"path":"basic/collection/1.java集合.md","ref":"basic/collection/1.java集合.md","articles":[]},"previous":{"title":"12.面试题一","level":"6.13","depth":1,"path":"多线程/10面试题一.md","ref":"多线程/10面试题一.md","articles":[]},"dir":"ltr"},"config":{"plugins":["-sharing","splitter","expandable-chapters-small","anchors","sharing-plus","anchor-navigation-ex","favicon","expandable-chapters","toggle-chapters","back-to-top-button","code","-lunr","-search","search-pro","pageview-count","popup","livereload"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"livereload":{},"splitter":{},"search-pro":{},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"popup":{},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"anchor-navigation-ex":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"favicon":{},"back-to-top-button":{},"pageview-count":{},"expandable-chapters-small":{},"sharing":{"qq":false,"all":["google","facebook","weibo","twitter","qq","qzone","linkedin","pocket"],"douban":false,"facebook":false,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":false,"messenger":false,"line":false,"vk":false,"pocket":false,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"toggle-chapters":{},"expandable-chapters":{}},"theme":"default","author":"hzh","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"计算机 ,java , 大数据 基础知识体系","language":"zh-hans","gitbook":"3.2.3"},"file":{"path":"多线程/10面试题二.md","mtime":"2020-12-19T02:33:14.683Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2020-12-30T11:12:56.611Z"},"basePath":"..","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="../gitbook/gitbook.js"></script>
    <script src="../gitbook/theme.js"></script>
    
        
        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-sharing-plus/buttons.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-toggle-chapters/toggle.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-back-to-top-button/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-code/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-search-pro/jquery.mark.min.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-search-pro/search.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-pageview-count/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-livereload/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

    </body>
</html>

